超级素数
> **如果一个质数 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;
}
``` 要解决这个问题,需要一个小学生用一台计算机算好多天,但是要优化这个问题的解决方案,那就需要一堆数论学家和全世界的超算算好几辈子。 算出来也没啥,浪费能量 经过计算,最大的超级质数是73939133。 本帖最后由 iawyxkdn8 于 2023-3-26 09:11 编辑
import java.util.*;
public class LargestPrime {
public static void main(String[] args) {
List<Integer> list = new ArrayList<Integer>();
int maxNum = 1000000;
int minNum = 100000;
// 在所有长度为6的数中寻找素数
for (int i = minNum; i < maxNum; i++) {
if (isAllPrime(i)) {
list.add(i);
}
}
System.out.println(Collections.max(list));
}
public static boolean isAllPrime(int num) {
String str = Integer.toString(num);
for (int i = 0; i < str.length(); i++) {
for (int j = i; j < str.length(); j++) {
int res = Integer.parseInt(str.substring(i, j + 1));
if (!isPrime(res)) {
return false;
}
}
}
return true;
}
private static Map<Integer, Boolean> cache = new HashMap<Integer, Boolean>();
public static boolean isPrime(int num) {
if (num < 2) {
return false;
}
if (cache.containsKey(num)) {
return cache.get(num);
}
for (int i = 2; i <= Math.sqrt(num); i++) {
if (num % i == 0) {
cache.put(num, false);
return false;
}
}
cache.put(num, true);
return true;
}
}
yamisxu 发表于 2023-3-26 00:33
算出来也没啥,浪费能量
体现一种思维模式吧 这是道很奇怪的题目,当然也不排除我没看懂题目的可能。
首先超级质数定义不同,不过按题中描述,叫超级超级质数什么也只是个名字
每位都是质数,在我的理解中,单位的质数只有2357,其中2和5只能放首位,否则两位数就不是质数了
其次相邻两位不能相同,否则除以11能除尽
再次25放首位不能有7,否则除3能除尽
所以2或5首位最大的超级质数是53
放弃25,则成了37的排列组合
373是质数,而737不是质数(7+7-3)=11
因此最大的题目要求的超级质数是373
这种做法厉害的小学生怕是10分钟能做出来,甚至不一定用编程验证,建议优化一下题目 最大373吧 不在于结果,在于解决思路,结果只是对于思路的验证 ai364395368 发表于 2023-3-26 09:03
经过计算,最大的超级质数是73939133。
错误的,9,39,93,……等数都不是质数
页:
[1]