http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2404
一直TLE 参考的qc的代码
先将素数求出 然后把连续的素数和求出 看和是否是素数 标记上
View Code
1 #include<stdio.h> 2 int p[100001],o[100001],sum[100001],q[100001]; 3 int main() 4 { 5 int i,j, k = 0, m, n,g,f,x; 6 g = 10; 7 for(i = 2 ; i <= 100000 ; i++) 8 if(p[i] == 0) 9 { 10 for(j = i+i; ;j=j+i) 11 { 12 if(j>100000) 13 break; 14 p[j] = 1; 15 } 16 } 17 k = 1; 18 for(i = 2 ; i <= 100000 ; i++) 19 if(!p[i]) 20 o[k++] = i; 21 sum[1] = o[1]; 22 for(i = 2 ; i <= k-1 ; i++) 23 { 24 sum[i]=sum[i-1]+o[i]; 25 g=sum[i]; 26 if(g<100000&&p[g]==0) 27 q[g]=1; 28 } 29 for(i = 3 ; i <= k-1 ; i++) 30 for(j = i-2 ; j >= 1 ; j--) 31 { 32 g = sum[i]-sum[j]; 33 if(g>100000) 34 break; 35 if(g<100000&&p[g]==0) 36 q[g] = 1; 37 } 38 scanf("%d", &m); 39 for(x = 1 ; x <= m ; x++) 40 { 41 scanf("%d", &n); 42 printf("Case %d: ",x); 43 if(q[n]) 44 printf("yes\n"); 45 else 46 printf("no\n"); 47 } 48 return 0; 49 }