问题链接:HDU5150 Sum Sum Sum。
题意简述:测试数据有多组,每组首先输入正整数n(1≤n≤1000),然后输入n个整数(1≤整数≤1000)。计算其中素数的和。
问题分析:对于测试数据比较多的情况,打表合适的。
程序说明:使用筛选法进行打表,然后再判断合计。
AC的C语言程序如下:
/* HDU5150 Sum Sum Sum */ #include <stdio.h> #include <memory.h> #include <math.h> #define MAXN 1000 int notprime[MAXN+1]; void esieve(int p[], int n) { int i, j; memset(p, 0, MAXN+1); // 筛选 int max = (int)sqrt(n); for(i=2; i<=max; i++) { if(p[i] == 0) { for(j=i+i; j<=n; j+=i) p[j] = 1; } } } int main(void) { esieve(notprime, MAXN); int n, sum, val, i; while(scanf("%d", &n) != EOF) { sum = 0; for(i=1; i<=n; i++) { scanf("%d", &val); if(!notprime[val]) sum += val; } printf("%d ", sum); } return 0; }