comet_c1360
这道题目提示了波兰特-切比雪夫定理,然后可以知道
在[n,2n]之间必然存在一个素数。
而题目给的n,k;
即从k+1开始,传向[2,n+1];
那么必然存在一个素数p 在 [(n+1)/2,n+1]之间,只要传到这个p,下一步即可覆盖整个区间.
随后的步骤就可以确定了,就是判断k+1是[n+1/2+1,n+1]的素数.
代码如下:
#include<iostream> #include<queue> #include<string> #include<cstring> #include<map> #include<algorithm> #include<cmath> using namespace std; bool isprime(long long x){ if(x<=3) return x>1; if(x%6!=1&&x%6!=5) return false; long long k=sqrt(x); for(int i=5;i<=k;i+=6){ if(x%i==0||x%(i+2)==0) return false; } return true; } int main(){ long long n,k; cin>>n>>k; if(2*k+2<=n+1){ cout<<2<<endl; } else{ if(isprime(k+1)) cout<<1<<endl; else cout<<2<<endl; } return 0; }