质数判断算法

2023-11-03

  有人做过这样的验算:1^2+1+41=43,2^2+2+41=47,3^2+3+41=53……于是就可以有这样一个公式:设一正数为n,则n^2+n+41的值一定是一个质数。这个式子一直到n=39时,都是成立的。但n=40时,其式子就不成立了,因为40^2+40+41=1681=41*41。

  研究发现质数除2以外都是奇数,而奇数除了【奇数*奇数】(或再“*奇数”)都是质数。那么用计算机先把【奇数*奇数】(以及再“*奇数”)(比如9,15,21,25,27,33,35,39……)都求出来,再找奇数中上面没提到的那些数,那些数就是素数。

  有近似公式: x 以内质数个数约等于 x / ln(x),ln是自然对数的意思。准确的质数公式尚未给出。10 以内共 4 个质数。100 以内共 25 个质数。

  古老的筛法可快速求出100000000以内的所有素数。筛法,是求不超过自然数N(N>1)的所有质数的一种方法,据说是古希腊的埃拉托斯特尼(Eratosthenes,约公元前274~194年)发明的,又称埃拉托斯特尼筛子。具体做法是:先把N个自然数按次序排列起来。1不是质数,也不是合数,要划去。第二个数2是质数留下来,而把2后面所有能被2整除的数都划去。2后面第一个没划去的数是3,把3留下,再把3后面所有能被3整除的数都划去。3后面第一个没划去的数是5,把5留下,再把5后面所有能被5整除的数都划去。这样一直做下去,就会把不超过N的全部合数都筛掉,留下的就是不超过N的全部质数。

  素数判断法:考虑到这么一个现实,任何一个合数都可以表现为适当个素数的乘积的形式,所以我们只用素数去除要判断的数即可,比如要判断100以内的素数,只用10以内的2,3,5,7就够了,10000以内的数用100以内的素数判断足以。(尚未确定这种lg关系是否严谨)

  Rabin-Miller算法:首先我们必须保证n 是个奇数,那么我们就可以把n表示为n=(2^r)*s+1,注意s 也必须是一个奇数。然后我们就要选择一个随机的整数a(1<=a<=n-1),接下来我们就是要判断 a^s=1 (mod n) 或a^((2^j)*s)=-1(mod n)其中(0<=j),如果任意一式成立,我们就说n通过了测试,但是有可能不是素数也能通过测试。所以我们通常要做多次这样的测试,以确保我们得到的是一个素数。(DDS的标准是要经过50次测试)采用Rabin-      Miller算法进行验算的方法:
0、对于需要验证的数n,先计算出m、j,使得n=1+m*2^j,其中m是正奇数,j是非负整数
1、随机取一个b,2<=b<n 
2、计算v=b^m mod n
3、如果v==1,通过测试,返回
4、令i=1
5、如果v=n-1,通过测试,返回
6、如果i==j,非素数,结束
7、v=v^2 mod n,i=i+1
8、循环到5

转载于:https://www.cnblogs.com/RoyCNNK/articles/2969587.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

质数判断算法 的相关文章

  • 逆向学习入门

    一 逆向工具 1 反汇编反编译工具 IDA pro Hex Ray 绝大部分指令集架构 dnspy net C JADX GDA JEB APK andriod Jd gui java python字节码 uncomply6反编译 pyc

随机推荐

  • 【牛客SQL】SQL2 查找入职员工时间排名倒数第三的员工所有信息

    题目描述 示例1 输入 drop table if exists employees CREATE TABLE employees emp no int 11 NOT NULL birth date date NOT NULL first
  • Pyqt5实战修炼之窗口自适应大小——Qtdesigner

    问题描述 QT Designer作为一个方便的可视化界面设计工具 很多新手在使用的时候只是简单的拖动左边菜单栏内的控件 摆放至合适的位置 但是当窗口大小发生变化的时候就会出现内容显示不全 或过多的留白 很不美观 问题分析 为什么会这样呢 主
  • Mysql查询库、表、索引、碎片大小

    查看表和索引和大小 SELECT TABLE NAME DATA LENGTH INDEX LENGTH DATA LENGTH INDEX LENGTH AS LENGTH TABLE ROWS CONCAT ROUND DATA LEN
  • 【MySQL】MySQL中如何对数据进行排序

    目录 MySQL中的数据排序 一 排序的基本使用 二 使用列的别名来排序 三 二级排序 MySQL中的数据排序 一 排序的基本使用 在查询数据时 如果没有使用排序操作 默认情况下SQL会按元组添加的顺序来排列查询结果 在SQL中 使用关键字
  • 单键开关机电路

    前一段子在板子上使用一个单片机控制的自杀式一键开关机电路 经过了好几天的测试才把它给调通了 最后居然是芯片坏了的问题 嗯 估计电路也有问题 不稳定 最近又看了几天的单键开关机电路 然后用protues仿真了一个不用单片要控制的单键开关电路
  • Dokcer14_5:Docker Compose volumes解析、Docker Compose volumes目录路径生成规则

    Dokcer14 5 Docker Compose volumes解析 Docker Compose volumes目录路径生成规则 docker compose volumes语法 语法格式及其三种变体 1 无来源 匿名挂载 主机系统上的
  • 数学建模竞赛常用代码总结-Python&Matlab

    数学建模过程中有许多可复用的基础代码 在此对 python 以及 MATLAB 中常用代码进行简单总结 该总结会进行实时更新 一 文件读取 python pandas 文件后缀名 扩展名 并不是必须的 其作用主要一方面是提示系统是用什么软件
  • G1垃圾收集分类-JVM(十四)

    上篇文章说了G1不在是连续的老年代年轻代 而是分为不同的region 有eden survivor old humongous 当大于百分之50region的数据则直接进入humongous 如果对象太大 会连续的存储 分为初始标记 并发标
  • 天津python爬虫培训

    许多许多同学都想开始学习Python 想做一位有着高薪的程序员 但是成为程序员也是有条件的 不是随随便便就能开始编程 哪怎么才能成为程序员呢 首先我们得先了解Python 知道一些基本知识 先入门 然后再开始一步一步的学习 慢慢地向程序员靠
  • 自动化测试框架理解

    自己总结的框架原理 虽然其中的含义还是比较模糊 但对于应付面试足够啦 数据驱动的测试方法 数据驱动从数据文件读取输入数据 通过变量的参数化将测试数据传入测试脚本 不同的数据文件对应不同的测试用例 我理解的就是不同的功能点测试 用一个表格列出
  • Python卸载

    Python卸载 因学习深度学习知识 需要安装Anaconda 而Anaconda本身会自带一个版本的python 为了不产生python版本之间的冲突 想要卸载原先安装的python 卸载python主要有以下几个步骤 1 找到安装pyt
  • java解析zip文件

    java解析zip文件 1 工具类 package org springblade iot utils import org apache commons fileupload FileItem import org apache comm
  • 数组 只出现一次的数字

    题目 只出现一次的数字 说明 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出现两次 找出那个只出现了一次的元素 Swift 题目 只出现一次的数字 说明 给定一个非空整数数组 除了某个元素只出现一次以外 其余每个元素均出
  • React生命周期执行顺序详解

    文章内容转载于https www cnblogs com faith3 p 9216165 html 一 组件生命周期的执行次数是什么样子的 只执行一次 constructor componentWillMount componentDid
  • qemu: could not load PC BIOS 'bios-256k.bin'

    qemu kvm 创建虚拟机时报错了 qemu could not load PC BIOS bios 256k bin 我在指定了BIOS后仍然不对 使用 find bios 256k bin 我发现 bios 256k bin是一个软连
  • 【shell】-exec和xargs

    目录 实现效果 参数说明 exec参数 xargs参数 exec和xargs 后执行多条语句 exec和xargs 执行自定义函数 如何正确组合 xargs bash c 和环境变量 exec和xargs的区别 exec和xargs的区别
  • C++primer U10 读书笔记 关联容器

    pair 类型 pair
  • 当出现jquery”ScriptResourceMapping时

    在使用MVC框架的时候出现这个问题 jquery ScriptResourceMapping 有以下几个参考步骤 1 添加引用 管理NuGet程序包 在搜索框中搜索jquery 版本有更新 在右侧点击安装jqu 安装后显示script文件
  • unity2D备忘志

    一 角色移动 unity里面的transform组件非常好用 transform right这种枚举值真的很方便 Vector2向量 控制移动方向 Input输入非常非常方便 后面章节有刚体移动 应用也很广泛 transform Trans
  • 质数判断算法

    有人做过这样的验算 1 2 1 41 43 2 2 2 41 47 3 2 3 41 53 于是就可以有这样一个公式 设一正数为n 则n 2 n 41的值一定是一个质数 这个式子一直到n 39时 都是成立的 但n 40时 其式子就不成立了