洛谷 P5535 【XR-3】小道消息

提示

你可能需要用到的定理——伯特兰-切比雪夫定理。

对于所有大于1的整数n,至少存在一个质数p,符合n < p < 2n。

而k+1≥2,满足条件,所以就分情况讨论即可

分析

①当k+1为质数,且(n+1)/2<k+1≤n+1 因为 2~n+1 没有数为它的倍数,即任何数与它互质,所以只需要一天即可

②当k+1为质数,且k+1≤(n+1)/2 在2~n+1中,一定有k+1的倍数,所以,第一天消息传给了不是k+1的倍数的所有数,由伯特兰-切比雪夫定理可得 ,在(n+1)/2~n+1之间,一定存在一个质数p,不是k+1的倍数,且与所有数互质,回到情况①。所以,在第二天,k+1的倍数也全都收到了消息,需要两天。

③当k+1为合数 在第一天,消息传给了不是(k+1)倍数和约数的数,由伯特兰-切比雪夫定理可得 ,在(n+1)/2~n+1之间,一定存在一个质数p,不是(k+1)倍数和约数,且与所有数互质所以回到了第①种情况,则第二天,k+1的倍数和约数的数也都收到了消息,需要两天

注意

① 2≤n≤10^14,要开long long

②由题意得,n和k要+1

#include<bits/stdc++.h>
using namespace std;
long long n,k;
bool sushu(long long x){
    long long ans=sqrt(x);
    for(int i=2;i<=ans;i++)
        if(x%i==0) return false;
    return true;
}//判断是否为质数 
int main(){
    scanf("%lld%lld",&n,&k);
    n+=1,k+=1;
    if(sushu(k)){
        if(k>n/2) printf("1\n");//对应第①种情况 
        else  printf("2\n");//对应第②种情况 
    }
    else  printf("2\n");//对应第③种情况 
    return 0;
}

 

posted @ 2022-02-12 17:36  Aurora-JC  阅读(83)  评论(0编辑  收藏  举报