让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
作答:
#include <stdio.h>
#include <stdbool.h> //引入布尔型变量
bool is_prime(int n) //判断是否为素数的函数
{
if (n <= 1) //如果这个数是0、1
return false; //返回假
for (int i = 2; i * i<= n ; i++) //否则从2到n-1遍历取余数
{
if (n % i == 0) return false; //如果余数为0,返回假
}
return true; //否则返回真
}
int count_prime_pairs(int N) //素数对计数函数
{
int count = 0; //计数值初始化为0
for (int i = 3; i <= N - 2; i += 2) //从3到N-2,每隔两个数遍历
{
if (is_prime(i) && is_prime(i + 2)) //若i与i+2均为素数(相邻且差为2,能保证相邻是由于对于n>1,dn为偶数)
{
count++; //计数值自加
}
}
return count; //返回计数值
}
int main()
{
int N; //定义一个整数N
scanf("%d", &N); //输入N的值
printf("%d", count_prime_pairs(N)); //输出素数对的个数
return 0;
}