题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2098
题目描述:
思路:
就是先将10000内的所有素数通过num[10005]数组进行记录,数组的值:0代表是素数,1代表不是素数 。然后在针对对应的偶数进行一半的查找即可。因为你找到这一半,其实就相当于找到了另一个,只要用(总值-查询到的数)就可知另个对应的数了。由于只需要统计个数,所以这个拆分成素数的数字就没有必要记录了。
AC代码:
#include<stdio.h>
#include<math.h>
int main(){
int n = 0;
int sum = 0;//用来记录素数对个数
int num[10005] = {0};//0代表是素数,1代表不是素数
num[1] = 1;//1不是素数,故置为1
for(int i = 2;i <= 10000;i++){
for(int j = 2;j <= sqrt(i);j++){
if(i%j==0){//一旦有除了1与其本身的除数就不是素数了
num[i] = 1;
break;
}
}
}
while(scanf("%d",&n) != EOF){
sum = 0;//初始化sum值
if(n == 0) break;
for(int i = n/2 + 1;i < n;i++) {
if(num[i]==0){
if(num[n-i]==0){
sum++;
}
}
}
printf("%d\n",sum);
}
return 0;
}