nyoj 22-素数求和问题(打表)

22-素数求和问题

内存限制:64MB
时间限制:3000ms
Special Judge: No

accepted:41
submit:52

题目描述:

现在给你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以内的每一个数据打表判断是否是素数,素数标记为0,非素数标记为1;

核心代码:  
 1 void cal_excel() // 打素数表
 2 {
 3     for(int i = 2; i <= MAXN; ++ i)
 4     {
 5         if(!excel[i])
 6         {
 7             for(int j = 2; ; ++ j)
 8             {
 9                 int temp = i * j;
10                 if(temp >= MAXN) break;
11                 excel[temp] = 1;
12             }
13         }
14     }
15 }

C/C++代码实现(AC):

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstring>
 4 #include <cstdio>
 5 #include <cmath>
 6 #include <stack>
 7 #include <map>
 8 #include <queue>
 9
10 using namespace std;
11 const int MAXN = 1005;
12 int excel[MAXN] = {1, 1};
13
14 void cal_excel()
15 {
16     for(int i = 2; i <= MAXN; ++ i)
17     {
18         if(!excel[i]) // 为0代表素数
19         {
20             for(int j = 2; ; ++ j)
21             {
22                 int temp = i * j;
23                 if(temp >= MAXN) break;
24                 excel[temp] = 1;
25             }
26         }
27     }
28 }
29
30 int main()
31 {
32     cal_excel();
33     int t;
34     scanf("%d", &t);
35     while(t --)
36     {
37         int n, cnt = 0, temp;
38         scanf("%d", &n);
39         for(int i = 0; i < n; ++ i)
40         {
41             scanf("%d", &temp);
42             if(!excel[temp]) cnt += temp;
43         }
44         printf("%d\n", cnt);
45     }
46     return 0;
47 }


原文地址:https://www.cnblogs.com/GetcharZp/p/9065158.html

时间: 2024-11-08 21:53:06

nyoj 22-素数求和问题(打表)的相关文章

NYOJ 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 样例输

nyist 22 素数求和

#include<stdio.h>int main(){int m,n,i,j,a,b;scanf("%d\n",&m);while(m--) // m组数据 { int sum=0; scanf("%d\n",&n); // 某一组 n个数 for(i=0;i<n;i++){ scanf("%d",&a); //分别输出这 n个数 变量afor(j=2;j<=a-1;j++) // 素数判定 if

NYOJ题目22 素数求和

题目描述: 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和.输入第一行给出整数M(0<M<10)代表多少组测试数据每组测试数据第一行给你N,代表该组测试数据的数量.接下来的N个数为要测试的数据,每个数小于1000输出每组测试数据结果占一行,输出给出的测试数据的所有素数和样例输入351 2 3 4 5811 12 13 14 15 16 17 181021 22 23 24 25 26 27 28 29 30样例输出104152 #inc

南阳理工OJ之素数求和问题

---------------------------------------------- AC代码: 1 import java.util.Scanner; 2 3 public class Main { 4 5 public static void main(String[] args) { 6 7 preprocess(); 8 9 Scanner sc=new Scanner(System.in); 10 11 int times=sc.nextInt(); 12 while(time

素数求和问题

素数求和问题 时间限制: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

2014-4-25 运行号:837134 素数求和

#include <iostream>#include <cstdio>#include <cstdlib>#include <string>#include <cmath>#include <cstring>#include <algorithm>using namespace std;bool pre_arry[1100];void pre_cnt() //素数筛{    memset(pre_arry,1,sizeo

素数求和

#include <iostream> using namespace std; int fun(int a) { if(a==1) return 0; for(int i=2;i<a;i++) { if(a%i==0) return 0; } return 1; } int main() { int x,M,N; cout<<"测试数据组数: "; cin>>M; while(M--) { int i,sum=0; cout<<&

梦工场实验室 素数求和 神奇的素数筛选

问题 G: 素数求和 时间限制: 1 Sec  内存限制: 256 MB提交: 142  解决: 30[提交][状态][讨论版] 题目描述 输入一个自然数n,求小于等于n的素数之和 输入 输出 样例输入 2 样例输出 2 提示 测试样例保证 2 <= n <= 2,000,000 埃拉托斯特尼筛法(Sieve of Eratosthenes) #include<stdio.h> #include<string.h> #include<stdlib.h> #i

luoguP1463:反素数ant(打表心得☆)

题目描述 对于任何正整数x,其约数的个数记作g(x).例如g(1)=1.g(6)=4. 如果某个正整数x满足:g(x)>g(i) 0<i<x,则称x为反质数.例如,整数1,2,4,6等都是反质数. 现在给定一个数N,你能求出不超过N的最大的反质数么? 输入输出格式 输入格式: 一个数N(1<=N<=2,000,000,000). 输出格式: 不超过N的最大的反质数. 输入输出样例 输入样例#1: 1000 输出样例#1: 840 题目 Step 1 这个是在openjudge