//直接暴力打表飘过,值得注意的就是1也是P-number.
AC代码:
#include<stdio.h> #include<string.h> #define max 1005 int isprime[max]; int prime[max]; int vis[max]; void Init() { int i,j,cnt=0; memset(vis,0,sizeof(vis)); memset(isprime,0,sizeof(isprime)); for(i=2;i<max;i++) { if(vis[i]==0) { prime[cnt++]=i; } for(j=0;j<cnt&&i*prime[j]<max;j++) { vis[i*prime[j]]=1; } } for(i=0;i<cnt;i++) { isprime[prime[i]]=1; } } int main() { Init(); int n; while(scanf("%d",&n)!=EOF) { int i,t,sum=0; for(i=0;i<n;i++) { scanf("%d",&t); if(t==1) { sum+=1; } else if(isprime[t]) { sum+=t; } } printf("%d\n",sum); } return 0; }