洛谷 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
#includeusing 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; }