如果不大于指定整数n的3个素数之和仍为素数,则把这3个素数称为一个基于n的全素组。例如对于n=15,素数3,5,11之和3+5+11=17为素数,则3,5,11 称为一个基于15的全素组。定义所有基于

全素组

题目

:如果不大于指定整数n的3个素数之和仍为素数,则把这3个素数称为一个基于n的全素组。例如对于n=15,素数3,5,11之和3+5+11=17为素数,则3,5,11
称为一个基于15的全素组。定义所有基于n的全素组中和最大的全素组称为最大全素组。 输入整数n(n≤3000),输出基于n的全素组的个数,并输出一个最大全素组。

1.思路:

枚举法,一个判断是否为质数的方法,一个获取不大于某数的所有质素的集合(此处用了ArrayList集合才做出来,本来想自己定义一个数组,初始化为Null,后面再给出具体大小,但是发现这样会报空指针异常,也throw不了。),一个具体处理方法(输出最大全素组和所有个数)

2.注意点:

a.忘了1既不是质数也不是合数,导致改错改了半天。
b.ArrayList里的get方法需要强制类型转换。

3.运行效率:

低,时间长。

4. 下面展示一些 内联代码片

import java.util.ArrayList;
import java.util.Scanner;

public class T1_1_28 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int m = sc.nextInt();
		sc.close();
		long start = System.currentTimeMillis();
		primeNumber(m);
		long end = System.currentTimeMillis();
		System.out.println(end - start+"ms");

	}
	public static void primeNumber(int a) {
		ArrayList<Integer> arr = recordNum(a);
		int sum = 0;
		int tem = 0;//记录有几组全素组
		int max1 = 0;//全素组三个数最大值
		int max2 = 0;
		int max3 = 0;
		for(int i = 0; i<arr.size(); ++i) {
			for(int j = i+1; j<arr.size(); ++j) {
				for(int k = j+1; k<arr.size(); ++k) {
					sum = (int) arr.get(i) + (int) arr.get(j) + (int) arr.get(k);
					if(isPrime(sum)) {
						tem++;
						max1 = (int) arr.get(i);
						max2 = (int) arr.get(j);
						max3 = (int) arr.get(k);
						
					}
				}
			}
		}
		
		if(tem == 0) {
			System.out.println("没有全素组");
		} else {
			System.out.println("全素组有"+tem+"个,"+"最大全素组为:"+max1+","+max2+","+max3);
			
		}
	}
	//返回不大于val的所有质数
	public static ArrayList<Integer> recordNum (int val) {
		int sum = 0;
		ArrayList<Integer> a = new ArrayList<Integer>();
		for(int i = 1; i <= val; ++i) {
			if(isPrime(i)) {
				a.add(i);
				sum++;
				
			}
			
		}
		   return a;
	}
	//判断是否为质数
	public static boolean isPrime(int b) {
		if(b == 1) {
			return false;
		}
		if(b == 2) {
			return true;
		}
		for(int i = 2; i<b; ++i) {
			if(b % i == 0) {
				return false;
			} 
		}
		return true;
		
	}

}

5.学习心得:目前处于菜鸡阶段,自己写一个要想很久很久,稍微难一点就得看别人的方法。坚持吧

猜你喜欢

转载自blog.csdn.net/balder_girl/article/details/113351404