素数求和问题
时间限制:
3000 ms | 内存限制:
65535 KB
难度:
2
-
描述
-
现在给你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
-
-
题上并没有说每组数据都是从小到大排好的,so...对每个数据都进行了一次素数判断#include <iostream> using namespace std; int main() { int N; cin >> N; while(N--) { int n; cin >> n; int sum = 0; for(int i = 0; i < n; i++) { int number; cin >> number; int j = 2; for(;j <= number; j++) { if(number%j == 0) { break; } } if(j == number) sum += number; } cout << sum << endl; } return 0; }
-
写代码的时候没有想到范围不用到number的,现在想起来只需要判断到sqrt(number)即可,一个小小的改动,就能省下很多时间
-
#include<stdio.h> #include <math.h> int main() { int m, n, i, j, a[1000], flag = 0; long s; scanf("%d", &m); while (m--) { s = 0; scanf("%d", &n); for (i = 0; i < n; i++) scanf("%d", &a[i]); for (i = 0; i < n; i++) { if (a[i] == 1) continue; flag = 0; for (j = 2; j <= sqrt(a[i]); j++) { if (a[i] % j == 0) { flag = 1; break; } } if (flag == 0) s += a[i]; } printf("%d\n", s); } return 0; }
一个sqrt也可以看出数学知识储备的差异 -
-
第一行给出整数M(0<M<10)代表多少组测试数据