寻找大素数算法

寻找大素数算法packageprimeNumber;importjava.util.Arrays;importjava.util.Scanner;/***本文系作者高中时候与同学讨论的结果生成结果是依据素数定理推倒而来依据此公式可以求出无限大的素数但非公理次计算结果虽然可以求无限大的素数但仍需验证**@author王伟2020-3-18**/publi…

大家好,又见面了,我是你们的朋友全栈君。

package primeNumber;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 本文系作者高中时候与同学讨论的结果生成 结果是依据素数定理推倒而来 依据此公式可以求出无限大的素数 但非公理 次计算结果虽然可以求无限大的素数 但仍需验证
 * 
 */
public class primeNumber {

    public static void main(String[] args) {

        // 调用方法输入阶乘范围(long 类型仅支持70以内的阶乘)
        Scanner scan = new Scanner(System.in);
        int num = Integer.parseInt(scan.next());
        int[] primeArray = primes(num);
        // long 类型仅能支持70以内的阶乘
        long p = 1;
        // 阶乘范围内的所有素数
        // i从1开始 因为后面还需加减2的
        for (int i = 1; i < primeArray.length; i++) {

            p *= primeArray[i];
        }
        /*
         * 根据素数定理 间隔log e (mun)一定会出现一个素数 且当num的值越大概率随之增大(详询百度百科)
         * 所以p±2^n有非常大概率是素数(n正整数) 并且num数值越大存在的素数越多
         */
        for (int i = 0; i < 20; i++) {

            System.out.println(i);
            System.out.println(Math.round(p + Math.pow(2, i)));
            // 分解验证
            getPrimer(Math.round(p + Math.pow(2, i)));

        }
    }

    // 寻找小范围内所有素数
    public static int[] primes(int n) {

        if (n < 0) {

            throw new IllegalArgumentException(
                    “N must be a non negative integer.”);
        }
        if (n <= 1) {

            return new int[0];
        }
        int len = ((n & 1) == 1) ? (n >> 1) + 1 : n >> 1;
        boolean[] p = new boolean[len + 1];
        for (int k = 3, limit = (int) Math.sqrt(n); k <= limit; k += 2) {

            if (!p[(k + 1) >> 1]) {

                for (int j = (k * k + 1) >> 1; j <= len; j += k) {

                    p[j] = true;
                }
            }
        }
        int primeNums = 0;
        /* 获取精确的素数数量,以免开辟过大的数组造成空间不足的情况。 */
        for (int i = 1; i <= len; i++) {

            if (!p[i]) {

                primeNums++;
            }
        }
        int[] primeArray = new int[primeNums];
        primeArray[0] = 2;
        int count = 1;
        for (int i = 2; i <= len; i++) {

            if (!p[i]) {

                primeArray[count++] = i * 2 – 1;
            }
        }
        return Arrays.copyOf(primeArray, count);
    }

    // 分解大数的质数因子 验证
    public static void getPrimer(long num) {

        for (int i = 2; i <= num; i++) {

            if (num % i == 0) {

                System.out.print(i + ” “);
                getPrimer(num / i);
                break;
            }
            if (i == num) {

                System.out.print(i + “”);
            }
        }
    }
}
 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/150327.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 简单使用压测工具JMeter

    简单使用压测工具JMeter目录一、安装步骤二、配置三、使用四、常见问题及解决一、安装步骤JMeter可以在JMeter的官方网站下载,如下图所示由于JMeter使用java开发,所以启动需要本机有jdk环境,这里使用的是jdk1.8。下载解压后,找到bin目录,运行jmeter.bat即可启动。二、配置jmeter.properties个人修改了字体的一些设置,可以参考HTTPResponse.parsers=htmlParserwmlParsercssParserbeanshell

    2022年10月24日
  • oracle优化器统计信息相关

    优化器使用统计信息来生成每个sql语句最优的执行计划。准确的统计信息对于数据库的效率至关重要。dba和程序开发人员都应该了解一些统计信息相关知识,这可以使你更好的理解为什么会生成一个你看到的执行计划,知其然且知其所以然。

    2022年4月8日
  • 理解公网IP和内网IP的区别「建议收藏」

    理解公网IP和内网IP的区别「建议收藏」什么是内网IP、公网IP?内网IP:由图可以看到路由器(第一层),交换机(第二层)然后是自己的电脑,所谓的内网就是从路由器以下开始的。我们内网用户的电脑都是经过交换机和路由器之后才能连到外网。路由器只需一个公网IP就可以供下面多个电脑联网使用。由于不同的内网IP能够重复使用。所以内网IP通常有以下类型:10.0.0.0~10.255.255.255172.16.0.0~172.31.2…

    2022年4月29日
  • 序列化和反序列化

    序列化和反序列化

    2022年1月15日
  • candence的图纸大小设置_标准制图图纸尺寸大小

    candence的图纸大小设置_标准制图图纸尺寸大小标准制图图纸尺寸大小[b]图纸尺寸大小[/b]A0:1189毫米*841毫米A1:841毫米*594毫米A2:594毫米*420毫米A3:420毫米*297毫米A4:297毫米*210毫米A5:210毫米*148毫米纸张幅面规格纸张的规格是指纸张制成后,经过修整切边,裁成一定的尺寸。过去是以多少”开”(例如8开或16开等)来表示纸张的大小,现在我采用国际标准,规定以A0、A1、A2、B1、B2…..

    2022年6月20日
  • VBS 刷屏代码[通俗易懂]

    VBS 刷屏代码[通俗易懂]刷屏代码VBSScript使用方法:复制需要转发的内容,点击QQ或者微信窗口,,再双击VBS脚本即可自动运行OnErrorResumeNextDimxda,yesetxda=createobject(“wscript.shell”)`循环次数fori=1to200`循环间隔时间wscript.sleep70xda.AppActivatexda.sendKeys”^v”xda.sendKeys”%s”nextwscript.quit…

    2022年6月9日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号