我也没想到竟然这么水,主要是一开始卡了半天想不出思路
题目直接就给了个伯特兰-切比雪夫定理 刚开始还不懂这个是啥意思
这里用到他的稍弱一些的说法,即:
对于所有大于1的整数n,至少存在一个质数p,符合n < p < 2n
首先对k进行分析;
情况一:k是个质数;
如果k是质数且
那么在这些数中,k的倍数不会知道消息,而其余的人都会知道消息,由于伯特兰-切比雪夫定理可知,一定有一个质数符合 ,所以可以推测出第二天就全部知道了;
如果k是质数且
那么第一天所有人都与这个质数互质,全部人都可以知道这个消息;
情况二:k是个合数;
显然,k一开始并不与所有的数互质,但是我们可以找出在范围之中的质数p,这样又回到了情况一的第二种小情况,于是需要1+1=2天。
其实通过定理找和题目之间的关系来解决题目也是个不错的选择
下面是ac代码
#include <bits/stdc++.h>
using namespace std;
bool isprime(long long n)
{
long long i;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0) return false;
}
return true;
}
int main()
{
long long n,k;
cin>>n>>k;
if(isprime(k+1))
{
if((n+1)>=(k+1)*2) cout<<"2"<<endl;
else cout<<"1"<<endl;
}
else cout<<"2"<<endl;
return 0;
}