PTA basic 1007 素数对猜想 (20 分) c语言实现(gcc)

让我们定义dn​​为:dn​​=pn+1​​pn​​,其中pi​​是第i个素数。显然有d1​​=1,且对于n>1有dn​​是偶数。“素数对猜想”认为“存在无穷多对相邻且差为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 }

 

posted @ 2021-04-18 20:41  keiiha  阅读(143)  评论(0编辑  收藏  举报