输出有时候是YES NO,有时候是Yes No,有时候是yes no。
因为这个WA实在可惜,Be careful !
#include<iostream> #include<cstring> #include<cstdio> #include<cmath> using namespace std; #define M 100000 bool mark[M+5],issuper[M+5]; int su[M+5]; int k; void prime(){ //筛选法找素数 int i,j; memset(mark,1,sizeof(mark)); mark[0]=mark[1]=0; for(i=2;i<=(int)sqrt(M*1.0);i++) if(mark[i]) for(j=i*i;j<M;j+=i) mark[j]=0; } void rar(){ //把找到的素数存进一个数组 k=0; int i; for(i=2;i<=M;i++) if(mark[i]) su[++k]=i; } void findsuper(){ int i,j; long long sum; memset(issuper,0,sizeof(issuper)); for(i=1;i<k;i++){ sum=su[i]; for(j=i+1;j<=k;j++){ sum+=su[j]; if(sum<=M&&mark[sum]) //注意前后两个条件不能颠倒,不然各种蛋疼 issuper[sum]=1; } } } int main(){ int t,icase=1; int n; scanf("%d",&t); prime(); rar(); findsuper(); while(t--){ scanf("%d",&n); if(issuper[n]) printf("Case %d: yes\n",icase++); else printf("Case %d: no\n",icase++); } return 0; } /************************************** Problem id : SDUT OJ 2404 Result : Accepted Take Memory : 704K Take Time : 30MS Submit Time : 2013-06-07 21:39:11 **************************************/