分拆素数和
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 37220 Accepted Submission(s): 16261
Problem Description
把一个偶数拆成两个不同素数的和,有几种拆法呢?
Input
输入包含一些正的偶数,其值不会超过10000,个数不会超过500,若遇0,则结束。
Output
对应每个偶数,输出其拆成不同素数的个数,每个结果占一行。
Sample Input
30 26 0
Sample Output
3 2#include<bits/stdc++.h> #define manx 10005 using namespace std; int p[manx]; int num; int a[manx]={1,1}; void PrimeForm() //线性素数筛打表 { for (int i=2; i<=10000; i++){ if (a[i]==0) p[num++]=i; for (int j=0; j<num && i*p[j]<=10000; j++){ a[i*p[j]]=1; if(i%p[j]==0) break; } } } void solve() { int n; while(~scanf("%d",&n) && n){ int ans=0; for (int i=2; i<n/2; i++) if(!a[i] && !a[n-i]) ans++; printf("%d\n",ans); } } int main() { PrimeForm(); solve(); return 0; }