素数求和

简介:
描述
现在给你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;
}


目录
相关文章
|
2月前
素数
素数
20 0
|
8月前
wustojc5004素数
wustojc5004素数
30 0
|
8月前
wustojc3010快速求和
wustojc3010快速求和
34 0
输出100以内的素数(质数)
输出100以内的素数(质数)
106 0
|
机器学习/深度学习 C语言
【C素数】素数(质数)和分解质因数
【C素数】素数(质数)和分解质因数
84 0
【C素数】素数(质数)和分解质因数
素数求和
这是刚开始写的代码,有点长。
58 0
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
欧几里得算法,既辗转相除法。用于计算正整数a,b的最大公约数
83 0
|
人工智能 算法 BI