閱讀160 返回首頁    go 阿裏雲 go 技術社區[雲棲]


素數求和

描述
現在給你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;
}


最後更新:2017-04-02 15:14:52

  上一篇:go 微軟員工證實 Windows 9 正在開發中
  下一篇:go 日期計算