如果一个质数 P 的每位数字都是质数, 而且每两个相邻的数字组成的两位数是质数, 而且每三位相邻的数字组成的三位数是质数, 依次类推, 如果每相邻的 k 位数字组成的 k 位数都是质数, 则 P 称为超级质数。如果把超级质数 P 看成一个字符串, 则这个超级质数的每个子串都是质数。请问, 最大的超级质数是多少?
思路:
先判断这个数是不是素数,然后判断这个数的所有子串是不是素数。
如何判断所有子串是不是素数?
--双重for循环,截取数字
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer>list =new ArrayList<Integer>();
//可以倒着写 i--,直接打印第一个数就是最大的
//但是又不知道最大的数是多少,还是正着来吧
for (int i = 1; i<1000000; i++) {
if(isAllPrime(i)) {
//把所有满足要求的素数都打印出来了
list.add(i);
}
}
//取最大的素数
System.out.println(Collections.max(list));
}
//判断相邻的n位是不是质数
public static boolean isAllPrime(int num){
String str = num+"";
for(int i=0;i<str.length();i++){
for (int j = i; j <str.length(); j++) {
//将字符串转为整数
//substring 左闭右开,j要比i大
int res = Integer.parseInt(str.substring(i,j+1)) ;
if(!isPrime(res)) {
return false;
}
}
}
return true;
}
//判断是不是质数
public static boolean isPrime(int num){
if(num ==1) {
return false;
}
for(int i=2;i<=Math.sqrt(num);i++){
if(num % i ==0){
return false;
}
}
return true;
}
|