HDU2098 分拆素数和
分拆素数和
Time Limit: 1000/1000 MS (java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 37570 Accepted Submission(s): 16394 PRoblem Description 把一个偶数拆成两个不同素数的和,有几种拆法呢? Input 输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。 Output 对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。 Sample Input
30 26 0 Sample Output3 2 Source 2007省赛集训队练习赛(2) 这个题有一点需注意一下,把一个偶数拆成两个不同的素数,我第一次写这道题的时候就楞是没看到不同俩字。。。 这里给出两种解法:#include<stdio.h> int main() { int n; int a[5000]; int i,j,k=0; int s; a[0]=2; for(i=3;i<=10000;i++) { s=0; for(j=2;j<i;j++) { if(i%j==0) s++; } if(s==0) { k++; a[k]=i; } } while(scanf("%d",&n),n!=0) { int s1=0; for(j=0;a[j]<n/2;j++) { for(i=0;a[i]<n;i++) if(a[j]+a[i]==n) s1++; } printf("%d\n",s1); } return 0; }#include<stdio.h> #include<iostream> #include<math.h> using namespace std; int prime(int n) { int i; if(n==1||n==0) return -1; if(n==2||n==3) return 1; for(i=2;i<=sqrt(n);i++) { if(n%i==0) break; } if(i>sqrt(n)) return 1; return -1; } int main() { int n,i; while(cin>>n,n!=0) { int ants=0; for(i=2;i<(n+1)/2;i++) { if(prime(i)==1&&prime(n-i)==1) ants++; } cout<<ants<<endl; } return 0; }