hd 2098 分拆素數和
阿新 • • 發佈:2019-01-26
#include<stdio.h> int sushu(int n) { int i; for(i=2;i<=n/2;i++) { if(n%i==0) return 1; } return 0; } int main() { int n,i,j; while(scanf("%d",&n)!=EOF&&n!=0) { j=0; for(i=2;i<=n/2;i++) if(sushu(i)==0&&sushu(n-i)==0&&i!=n-i) j++; printf("%d\n",j); } return 0; }
打表法
#include<stdio.h> int prime[10010]={1,1,0}; int fun() { int i,j; for(i=2;i*i<10010;i++) { if(!prime[i]) { for(j=i*i;j<10010;j+=i) prime[j]=1; } } } int main() { int n,k,i; while(scanf("%d",&n)!=EOF&&(n!=0)) { k=0; fun(); for(i=2;i<=n/2;i++) { if(prime[i]==0&&prime[n-i]==0&&i!=n-i) k++; } printf("%d\n",k); } //while(1); return 0; }
//使用while(1);記得加分號才能達到效果,使用完畢記得註釋掉
//如果程式超時就看是否註釋掉while(1);
//打素數表注意if(!a[i]),注意先定義陣列,再定義函式,在main()函式中再呼叫此函式時注意加上函式名,比如此例中的fun();
//做題先審清題才能少做無用功,比如此例中“不同素數”,那就要加上限制條件“i!=n-i;”