20210419 C题题解
游戏规则:
分别输入两个数l和k
查询 l~l+2k 内是否存在 k+1 个质数
若存在则输出Yes 不存在则输出No
众所周知,质数的个数随着自然数的增大而逐渐逐渐稀缺,且质数仅能是奇数
故2k个数中必有k个数是偶数,则不可能存在k+1个数使得其成立
故只需特判特殊情况2 附近的数即可
//AC代码
#include<iostream>
using namespace std;
int main()
{
int n,m;
cin >> n >> m;
if(n==2&&(m==1||m==2||m==3))cout << "Yes";
else cout << "No";
return 0;
}
另外科普一个判断素数的方法
(不过该方法也是在枚举暴力的基础上进行解决,故也无法解决该题)
(也可能只有我自己不知道,昨天查的素数判断方法才知道的…)
输入一个数n,判断n是否为素数的简便方法:
当n小于5时特判n
若n大于5则:
设n=6x+y;
以6为循环,得出6x,6x+1,6x+2,6x+3.6x+4,6x+5;
6x,6x+2,6x+3,6x+4三者必有以 2 或 3 为因数故可以直接排除
若满足n=6x+1或者n=6x+5 则可能为质数 故再进行接下里的判断;
函数代码如下
//prime
int t=0,n;
cin >> n;
if (n == 2 || n == 3 || n==5)
{
cout << "Yes"
}
else if( n == 4 )
{
cout << "No"
{
else if (n % 6 != 1 && n % 6 != 5)
{
t=1;
}
if(t)
for (int i = 5; i*i <= num; i += 6)
{
if (num % i == 0 || num % (i+2) == 0)
{
cout << "No";
t=0;
}
}
else cout << "No";
if(!t) cout << "Yes";
}