让我们定义d?n??为:d?n??=p?n+1???p?n??,其中p?i??是第i个素数。显然有d?1??=1,且对于n>1有d?n??是偶数。“素数对猜想”认为“存在无穷多对相邻且差为2的素数”。
现给定任意正整数N
(<),请计算不超过N
的满足猜想的素数对的个数。
输入在一行给出正整数N
。
在一行中输出不超过N
的满足猜想的素数对的个数。
20
4
解题思路
1.判定素数,本题从2开始到N为止,求素数对 首先判定一个数是否为素数,写一个单独的函数来做判定,是返回1否返回0;
2.素数判定要求只能被自身和1整除, 如果可以被任意一个从2到n-1的数整除(取余为0)就不是素数, 如果到最后都没被整除即认定为素数返回1
3.素数判定不是一定要从2到N-1,从2到根号N即 sqrt(N) 就可以判定是不是素数
4.10w以内的素数只有9592个,因此数组的大小给了10000
1 #include "stdio.h" 2 #include "stdlib.h" 3 #include "math.h" 4 int primenum(int *n){ 5 int i,m; 6 m=(int)sqrt((double)*n);//sqrt要求double参数,求得根号值再转为int 7 for(i=2;i<=m;i++){ 8 if(*n%i==0)return 0; 9 } 10 if(i>m)return 1;//全都不能被整除则认定为素数 11 return 0; 12 } 13 int main(){ 14 int n,i,arr[10000],j=0,count=0; 15 scanf("%d",&n); 16 for(i=2;i<=n;i++){ 17 if(primenum(&i)){ 18 arr[j]=i; 19 j++; 20 } 21 } 22 for(i=0;i<j;i++){ 23 if(arr[i+1]-arr[i]==2){//判定差值为2的素数对 24 count++; 25 } 26 } 27 printf("%d\n",count); 28 return 0; 29 }
PTA basic 1007 素数对猜想 (20 分) c语言实现(gcc)
原文:https://www.cnblogs.com/ichiha/p/14674525.html