(22)素数求和问题

来源:互联网 发布:codol刷等级软件 编辑:程序博客网 时间:2024/05/19 22:55

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

解法一:

import java.util.Scanner;/** * 现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和 * @author Administrator * */public class Test_22 {public int PrimeSum(int[] a){int sum = 0;boolean flag = true;for(int i = 0; i < a.length; i++){for(int j = 2; j <= Math.sqrt(a[i]); j++){if(a[i]%j == 0)flag = false;}if(flag && a[i] != 1)sum += a[i];flag = true;}return sum;}/** * @param args */public static void main(String[] args) {Test_22 t = new Test_22();Scanner sc = new Scanner(System.in);int num = sc.nextInt();int len = 0;int[][] s = new int[num][];int [] sigle;for(int i = 0; i < num; i++){len = sc.nextInt();sigle = new int[len];for(int j = 0; j < len; j++){sigle[j] = sc.nextInt();}s[i] = sigle;}for(int i = 0; i < num; i++){System.out.println(t.PrimeSum(s[i]));}}}

解法二:(不太符合要求,但是效率高)

 import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.StringTokenizer;class Main{/** * @param args * @throws IOException  */public static void main(String[] args) throws IOException {// TODO Auto-generated method stubBufferedReader br = new BufferedReader (new InputStreamReader(System.in));String line = br.readLine();int testNum = Integer.parseInt(line);for(int testNu =1;testNu<=testNum;testNu++){int num = Integer.parseInt(br.readLine()); line  = br.readLine();StringTokenizer st = new StringTokenizer(line);int sum =0;while(st.hasMoreTokens()){int numb = Integer.parseInt(st.nextToken());boolean b;b = true;if(numb!=1){if(numb%2==0&&numb>2){b=false;}for(int i=3;i<Math.sqrt(numb)+1;i+=2){if(numb%i==0){b=false;}}if(b){sum+=numb;}}}System.out.println(sum);}}}        


0 0