#include <stdio.h> #include <stdlib.h> #include<math.h> int isPri(int a, int b) { int i; for(i=2; i <= sqrt(a); i++) { if(a%i == 0) return 0; } for(i=2; i <= sqrt(b); i++) { if(b%i == 0) return 0; } return 1; } int main() { int n,flag,i,cout; while(scanf("%d",&n) != EOF && n) { cout=0; for(i=2; i< n/2+1; i++) { flag=isPri(i,n-i); if(flag == 1) cout++; } printf("%d\n",cout); } return 0; }
以后都用《埃拉托斯特尼筛法》打表
算法描述:小于2的不是素数,用一个数组a[10000],元素下标表示这个数,元素的值表示是否是素数,c++做法是,bool a[10000],将a[0]和a[1]赋成0,从2开始,2*2,2*3...
2*6...这些下标对应的元素值全改0,在此环境下再次寻找下一个素数,再一次,3*2,3*3,3*4...乘积整体小于10000
int a[10000]; a[0]=0;a[1]=0; for(i=2;i<10000;i++) a[i]=1; for(i=2;i<10000;i++) { if(a[i] == 1) { for(j=2;j<10000;j++) { a[i*j] == 0; } } } for(int j=2;j<=n;++j){ if(isPrimes[j]==true) for(int m=2;j*m<=n;++m)isPrimes[j*m] = false;
参见:
http://blog.csdn.net/kingwolfofsky/article/details/7199758
时间: 2024-10-14 04:11:27