码迷,mamicode.com
首页 > 其他好文 > 详细

comet_c1360

时间:2020-01-13 21:31:26      阅读:81      评论:0      收藏:0      [点我收藏+]

标签:map   lse   comet   iostream   sqrt   namespace   pre   一个   bool   

这道题目提示了波兰特-切比雪夫定理,然后可以知道

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

comet_c1360

标签:map   lse   comet   iostream   sqrt   namespace   pre   一个   bool   

原文地址:https://www.cnblogs.com/Ean1zhi/p/12189127.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!