22-素数求和问题

题目描述:

现在给你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

AC代码:

#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int n){
  if(n==1) return false;
  if(n==2 || n==3)return true;
  if(n%6!=1 && n%6!=5) return false;
  for(int i=5;i<=sqrt(n);i+=6){
    if(n%i==0 || n%(i+2)==0)
      return false;
  }
  return true;
}
int main(){
  int t,n,m;
  ios::sync_with_stdio(false);
  cin >> t;
  while(t--){
    cin >> n;
    int ans = 0;
    for(int i=0;i<n;++i){
        cin >> m;
        if(is_prime(m)){
          ans+=m;
        }
    }
    cout << ans << endl;
  }
  return 0;
}

 

点赞