问题链接: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\n", sum);
}
return 0;
}