解题思路:
        假设有一个n位的特殊质数,他可以看作为在n-1位的特殊质数基础上再在末尾加一位数,加上后判断其是否为质数即可,因为前面的已经是特殊质数了,只需要考虑加上最后一位数是否为质数,是质数就符合特殊质数的规则,而且因为只有在最后加上1、3、7、9这四个数才可能为质数,加上2、4、6、8均会被二整除,加上5定会被5整除,所以只需要判断加上1、3、7、9四个数后的数是否为质数即可,基于此很容易就可以想到用递归的方法进行解决,详解请参考代码注释。
注意事项:
        无
参考代码:

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

public class Main {
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int n = scanner.nextInt();
		ArrayList<Integer> result = new ArrayList<Integer>();
		result = specialPrimeNumber(n);
		for (Integer integer : result) {//将集合遍历输出
			System.out.println(integer);
		}
		scanner.close();
	}
	
	public static ArrayList<Integer> specialPrimeNumber(int n) {
		ArrayList<Integer> num = new ArrayList<Integer>();//存储得到的特殊质数
		if(n == 1) {//如果输入的是1,直接返回1-9的质数集合即可
			for (int i = 0; i <= 9; i++) {
				if (isPrimeNumber(i)) {
					num.add(i);
				}
			}
		}else {//如果输入的大于1,就是在输入n-1时得到的特殊质数的基础上再加一位数
			num = specialPrimeNumber(n-1);//得到输入n-1时求得的特殊质数集合
			int size = num.size();//记录集合初始大小,因为在循环中集合的大小发生了改变
			for (int i = 0; i < size; i++) {
				int temp = num.remove(0);//通过for循环依次取出特殊质数集合里的值
				if (isPrimeNumber(temp *10 + 1)) {//在取出的特殊质数后加依次1、3、7、9,并判断其是否为质数
					num.add(temp*10+1);//如果是质数就代表再加上这位数还是质数,符合特殊质数的条件,将其加入集合
				}
				if (isPrimeNumber(temp *10 + 3)) {
					num.add(temp*10+3);
				}
				if (isPrimeNumber(temp *10 + 7)) {
					num.add(temp*10+7);
				}
				if (isPrimeNumber(temp *10 + 9)) {
					num.add(temp*10+9);
				}
			}
		}
		return num;//返回得到的特殊质数集合
	}
	//判断是否是质数
	public static boolean isPrimeNumber(int number) {
		int count = 0;
		for (int i = 2; i <= number; i++) {
			if (number % i == 0) {
				count ++;
				if (count > 1) {
					break;
				}
			}
		}
		if (count == 1) {
			return true;
		}else {
			return false;
		}
	}
}


点赞(0)
 

0.0分

2 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 1 条评论

斯巴达 2年前 回复TA
妙啊