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;
}

猜你喜欢

转载自www.cnblogs.com/Ean1zhi/p/12189127.html