让我们定义dn?为:dn?=pn+1??pn?,其中pi?是第i个素数。显然有d1?=1,且对于n>1有dn?是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<105),请计算不超过N
的满足猜想的素数对的个数。
输入格式:
输入在一行给出正整数N
。
输出格式:
在一行中输出不超过N
的满足猜想的素数对的个数。
输入样例:
20
输出样例:
4
解析:利用自定义判断素数的函数,把不大于n的素数全部存在一个数组k中,然后循环遍历测试相邻两个位置是否差2,是的话,计数加1。
#include <stdio.h>
#include <math.h>
long long k[100005];
long long su(long long n){long long i=0,shifou=1;if(n==2) shifou=1;if(n==1){shifou=0;}else if(n>2){for(i=2;i<=sqrt(n);i++){if(n%i==0){shifou=0;break;}}}return shifou;
}
int main()
{long long n=1,m=0,i=0,cnt=0;while(~scanf("%lld",&n)){for(i=1;i<=n;i++){if(su(i)==1) k[m]=i,m++;}for(i=0;i<m-1;i++){if(k[i]==k[i+1]-2) cnt++;}printf("%lld\n",cnt);cnt=0,m=0; }return 0;
}