寻找大素数算法

寻找大素数算法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 + “”);
            }
        }
    }
}
 

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 六维空间正确网址及工具

    六维空间正确网址及工具六维空间:http://bt.neu6.edu.cn/forum.phputorrentDlut版下载: https://github.com/xdd1997/Download-or-P

  • 如何开发股票软件情报分析功能101[通俗易懂]

    如何开发股票软件情报分析功能101[通俗易懂]各种情报铺天盖地,真真假假,虚虚实实,很多是庄家的托放出来的假情报。数据的解读也是一样,各种数据铺天盖地。但是东方大国股市的反应是真的,本周下跌趋势是真的。各种数据和情报分析就是很重要的功能,对于股票软件开发而言。哪些是假情报,哪些是真实的数据,就需要认真分析,不能一股脑传递给散户。突围!国内外局势正发生巨大转向!https://mu.mbd.ba…

  • 树的专题整理(二)

    树的专题整理(二)

  • java反射机制

    java反射机制学习spring提到spring框架中的setter方法是使用反射机制实现的,反射机制到底是什么呢?找了一篇文章Java基础与提高干货系列——Java反射机制Java基础与提高干货系列前言今天

  • 最棒的java代码生成器「建议收藏」

    最棒的java代码生成器「建议收藏」一款Java语言基于SpringBoot2.x、Layui、Thymeleaf、MybatisPlus、Shiro、MySQL等框架精心打造的一款模块化、插件化、高性能的前后端分离架构敏捷开发框架,可用于快速搭建前后端分离后台管理系统,本着简化开发、提升开发效率的初衷,自研了一套个性化的组件,实现了可插拔的组件式开发方式:单图上传、多图上传、下拉选择、开关按钮、单选按钮、多选按钮、图片裁剪等

  • 计算机管理找不到指定模块,卸载时找不到指定模块怎么办_电脑卸载找不到指定模块处理方法-win7之家…

    计算机管理找不到指定模块,卸载时找不到指定模块怎么办_电脑卸载找不到指定模块处理方法-win7之家…我们在使用电脑的过程中,对于系统中安装的大不多数软件有些是不需要,因此就需要卸载掉,以此保证电脑的内存充足,但是近日有的用户发现自己的电脑在卸载软件时总是会有找不到指定模块的提示,那么卸载时找不到指定模块怎么办呢?下面小编就来告诉大家电脑卸载找不到指定模块处理方法。具体方法:方法1:电脑清理法1、打开电脑安装的安全软件(这里以360为例),点击“电脑清理”。2、进入后找到“清理注册表”这项,然后在…

发表回复

您的电子邮箱地址不会被公开。

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