让我们定义 dn 为:dn = pn+1 - pn,其中 pi 是第i个素数。显然有 d1=1 且对于n>1有 dn 是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N (< 105),请计算不超过N的满足猜想的素数对的个数。
输入格式:每个测试输入包含1个测试用例,给出正整数N。
输出格式:每个测试用例的输出占一行,不超过N的满足猜想的素数对的个数。
输入样例:20输出样例:
4
此题只要求比较前后两个素数差值,因此不需要存储,使用两个变量,依次替换求差即可
题目要点在于求素数,基本方案有三个,一个是将小于该数的数字都当做除数求一遍余数,看是否是因子;第二种是循环变量加2,排除所有的偶数;
第三种使用定理,将循环变量的范围限制在该数开方,原因是如果一个数字是合数,必有一个因子小于该数开方。
代码:
#include <iostream>
#include <math.h>
using namespace std;
bool isprime(int x)
{
bool flag=true;
int i, loop = (int)sqrt(x);
for (i = 3; i < loop || i == loop; i += 2)
{
if (!(x%i))
{
flag = false;
break;
}
}
return flag;
}
int main()
{
int number,i , d, p = 2;
int count = 0;
cin >> number;
for (i = 3; i < number + 1; i+=2)
{
if (isprime(i))
{
d = i - p;
if (d == 2)
count++;
p = i;
}
}
cout << count << endl;
return 0;
}