吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1907|回复: 9
收起左侧

[学习记录] 超级素数

  [复制链接]
dxxbjl 发表于 2023-3-25 20:36

如果一个质数 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;
    }

免费评分

参与人数 4吾爱币 +2 热心值 +4 收起 理由
yyb414 + 1 + 1 热心回复!
v19951903918 + 1 用心讨论,共获提升!
Whalo + 1 + 1 我很赞同!
wuai666hjp + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

列明 发表于 2023-3-25 22:26
要解决这个问题,需要一个小学生用一台计算机算好多天,但是要优化这个问题的解决方案,那就需要一堆数论学家和全世界的超算算好几辈子。
yamisxu 发表于 2023-3-26 00:33
ai364395368 发表于 2023-3-26 09:03
iawyxkdn8 发表于 2023-3-26 09:07
本帖最后由 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;
    }
}
cn2jp 发表于 2023-3-26 09:08
yamisxu 发表于 2023-3-26 00:33
算出来也没啥,浪费能量

体现一种思维模式吧
zzzznl 发表于 2023-3-26 10:38
这是道很奇怪的题目,当然也不排除我没看懂题目的可能。
首先超级质数定义不同,不过按题中描述,叫超级超级质数什么也只是个名字
每位都是质数,在我的理解中,单位的质数只有2357,其中2和5只能放首位,否则两位数就不是质数了
其次相邻两位不能相同,否则除以11能除尽
再次25放首位不能有7,否则除3能除尽
所以2或5首位最大的超级质数是53
放弃25,则成了37的排列组合
373是质数,而737不是质数(7+7-3)=11
因此最大的题目要求的超级质数是373
这种做法厉害的小学生怕是10分钟能做出来,甚至不一定用编程验证,建议优化一下题目
skywalker0123 发表于 2023-3-26 10:39
最大373吧
sihua3000 发表于 2023-3-26 13:43
不在于结果,在于解决思路,结果只是对于思路的验证
1107934496 发表于 2023-4-13 14:24
ai364395368 发表于 2023-3-26 09:03
经过计算,最大的超级质数是73939133。

错误的,9,39,93,……等数都不是质数
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 23:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表