描述
现在给你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
解法一:
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 stub
BufferedReader 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);
}
}
}