版权声明:余生请多指教,欢迎交流学习: https://blog.csdn.net/LYS20121202/article/details/84436678
原题目:
让我们定义dn为:dn=pn+1−pn,其中pi是第i个素数。显然有d1=1,且对于n>1有dn是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
分析:
1.根据题目中所给素数对的猜想,即在题目要求的范围内相差为2的相邻素数有多少个。因此我的方法是从2开始向正整数N判断,若当前值为素数,且加2后满足小于等于N且为素数,则执行操作+1,最后打印结果。
代码:
C语言版:
#include <stdio.h>
#include <stdlib.h>
//函数用于判断是否为素数,
int isPrime(int n)
{
int t=1,i=2;
for(i=2;i<=sqrt(n);i++)
{
if(n%i==0)
{
return 0;
}
}
return 1;
}
int main()
{
//num 为读入的数,flag为符合题目的个数,tag_1 tag_2分别是两次判断的标记
int num,flag=0,tag_1=0,tag_2=0,i=0;
scanf("%d",&num);
for(i=2;i<num;i++)
{
tag_1=isPrime(i);//第一次判断
if(tag_1==1)//满足条件则判断+2后的值
{
if(i+2<=num)
{
tag_2=isPrime(i+2);//加2的值的判断
if(tag_2==1)//满足条件
{
flag++;//计数加一
}
}
else
{
break;
}
}
}
printf("%d\n",flag);//打印结果
return 0;
}