题解
如果 k+1 是质数,且 n+1 内没有 k+1 的倍数,那么只需要一天
否则 只需要两天
-
如果 k+1 不是质数,第一天产生的质数会在第二天布满所有数
-
如果 k+1 是质数,那么 k+1 ~ 2k+2 之间一定有一个质数,也能布满所有数
实施
首先要判断 k 是不是质数 \(O(\sqrt(n))\) 恰好可以
code
#include<bits/stdc++.h>
using namespace std;
#define int long long //一定要开long long,不开long long 见祖先
int n, k;
bool prime(int x)//很清晰的质数筛
{
if(x == 1)//特判一下1
return 0;
if(x == 2)//特判一下2
return 1;
for(int i = 2; i <= sqrt(x); ++ i)//就是枚举每个数,看看它是否是它的约数
if(x % i == 0)//如果不是的话
return 0;//直接return false
return 1;
}
signed main()
{
scanf("%lld%lld", &n, &k);
if(prime(k + 1) && 2 * k >= n)//其实,也很好理解,想一想,如果一个数是质数那么是不是除去它的倍数的数都与它互质?所以prime(k + 1)是判断它是不是质数,后面就是找有没有它的倍数(因为是连续的所以只有比一下大小即可
printf("1");
else//除去1的答案就是二了(会有解释
printf("2");
return 0;
}
标签:return,P5535,int,质数,特判,long,倍数,XR,小道消息
From: https://www.cnblogs.com/pure4knowledge/p/18314773