素数对猜想
题目链接
题源:PTA中mooc数据结构起步自测
思路
1、判断n以内大于2的整数是否为素数。对任意大于2的整数x,如果x不能被 2 ~
x
\sqrt[]{x}
x间任一整数整除,m 必定是素数。若m为素数,则最后一次循环必会执行i++,故可将i>k作为判定素数的条件。
2、遍历从2到n的所有整数,若其为素数,则将其放入数组a[]中,得到区间内所有素数后,对数组内元素进行遍历,求前后两数之差,若相差为2则素数对的个数加一。
代码
#include <stdio.h>
#include <math.h>
int a[100000];
int prime(int x){
int i;
int k=(int)sqrt((double)x);
for(i=2;i<=k;i++){
if(x%i==0) break;
}
if(i>k) return 1;
else return 0;
}
int main()
{
int n,j=0,sum=0;
scanf("%d",&n);
for(int t=2;t<=n;t++){
if(prime(t)==1){a[j]=t;j++;}
}
for(int i=1;i<j;i++){
int d=a[i]-a[i-1];
if(d==2) sum++;
}
printf("%d\n",sum);
}
出现的问题
1、判断素数的prime()函数中for循环的初始条件出错,将i=2误判为i=0,在取余操作时导致溢出。