描述
現在給你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
樣例輸出
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;