#include<stdio.h> #include<math.h> #define MAX 10105 int prime[1300]={0},s[10105]={0}; int isPrime(int n) { int i; for(i=2;i<=sqrt(1.0*n);i++) if(n%i==0) return 0;//0 is not prime return 1;//1 is prime } int main() { int i,j,k,n,ans,sum; k=0; for(i=2;i<=MAX;i++) { if(s[i]==0) prime[k++]=i; for(j=i;j<=MAX;j=j+i) s[j]=1; } while(scanf("%d",&n)!=EOF&&n!=0) { ans=0; if(n==1) printf("0\n"); else{ if(isPrime(n)==1)ans++; for(i=0;prime[i]<n;i++) { sum=0; for(j=i;prime[j]<n;j++) { sum+=prime[j]; if(sum==n) { ans++; break; } if(sum>n) break; } } printf("%d\n",ans);} } return 0; }
题意:给定一个数,有多少种可以由素数相加而得到的方案