素数求和

来源:互联网 发布:现金贷系统源码 编辑:程序博客网 时间:2024/06/08 05:10
描述
现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。

输入
第一行给出整数M(0<M<10)代表多少组测试数据
每组测试数据第一行给你N,代表该组测试数据的数量。
接下来的N个数为要测试的数据,每个数小于1000
输出
每组测试数据结果占一行,输出给出的测试数据的所有素数和
样例输入

3
5
1 2 3 4 5
8
11 12 13 14 15 16 17 18
10
21 22 23 24 25 26 27 28 29 30

样例输出

10
41
52

采用筛法求素数,1000以内的素数,使用70MS左右,测试的时候,不同时刻运行

,得到的时间不同,差别不大。我也不明白为什么!

代码如下:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

#define MAX_SIZE 1000
bool isPrime[MAX_SIZE];

void CreatePrimeTable()
{
memset(isPrime, true, sizeof(isPrime));
isPrime[0] = isPrime[1] = false;
int i, j;
for (i = 2; i * i <= MAX_SIZE; i++)
{
if (isPrime[i])
{
for (j = i * 2; j <= MAX_SIZE; j += i)
isPrime[j] = false;
}
}
}
int main()
{

CreatePrimeTable();

int m, n;

cin >> m;
for (int i = 1; i <= m; i++)
{
int sum = 0, a;
scanf("%d", &n);
for (int j = 1; j <= n; j++)
{
scanf("%d", &a);
if (isPrime[a])
{
sum += a;
}

}
printf("%d\n", sum);
}

return 0;
}