【数论】第1章 整数的可除性(1) 整除概念与带余除法(2) 素数
本文属于「数论」系列文章之一。这一系列着重于数论算法的学习和应用。由于内容随时可能发生更新变动,欢迎关注和收藏数论算法系列文章汇总目录一文以作备忘。此外,在本系列学习文章中,为了透彻理解数论知识,本人参考了诸多博客、教程、文档、书籍等资料。以下是本文的不完全参考目录,在后续学习中还会逐渐补充:
- 数论算法,姜建国、臧明相编著,西安电子科技大学出版社
文章目录
- 1. 素数的定义及性质
1. 素数的定义及性质
定义1.1.2 设整数 a≠0,±1a \ne 0, \pm 1a=0,±1 ,如果它除了显然约数 ±1,±a\pm 1, \pm a±1,±a 外没有其他的约数,则称 aaa 为素数(或质数、不可约数);若 a≠0,±1a\ne 0, \pm 1a=0,±1 ,且 aaa 不是素数,则称 aaa 为合数。
约定:本系列文章所说的素数一般指正整数。这是因为当 a≠0,±1a\ne 0, \pm 1a=0,±1 时,a,−aa, -aa,−a 必同时为素数或合数,故由整除的性质知,对正素数成立的结论一般对负素数也成立。
定理1.1.1(1)大于 111 的最小正因数必是素数。
(2)nnn 是正整数,若对所有满足 2≤p≤n2\le p\le \sqrt{n}2≤p≤n 的 ppp 而言,有 p∤np\nmid np∤n ,则 nnn 是素数。
证明 (1)显然。
(2)反证法。若 nnn 是合数(数理逻辑中的假设前提),则存在 1<a≤b1< a\le b1<a≤b 使得 n=abn = abn=ab ,那么必有 2≤a≤n2 \le a \le \sqrt{n}2≤a≤n(知 b=nab = \dfrac{n}{a}b=an ,则有 a≤b=naa \le b = \dfrac{n}{a}a≤b=an 即 a2≤na^2 \le na2≤n )且 a∣na \mid na∣n ,与已知条件矛盾。故 nnn 必是素数。
定理1.1.1(2)的一个应用,就是减少在素数判断时的运算量,提高判断效率。因为判断一个正奇数 n(n>2)n (n \gt 2)n(n>2) 的素性(即判断 nnn 是否为素数;大于 222 的偶数一定不是素数)的最简单、直观的方法之一就是穷举法。即用每个小于 nnn 的奇素数 qqq 试除 nnn ,当每个 q∤nq\nmid nq∤n 时则说明 nnn 是素数。而定理1.1.1(2)告诉我们,此时只需要对小于等于 n\sqrt{n}n 的奇素数 qqq 进行穷举即可。
定理1.1.2 素数有无穷多。(如何证明素数有无穷多个?知乎)
证明 反证法。
- 假设只有有限个素数(注意:已约定素数一定是正整数),它们是 p1,p2,…,pkp_1, p_2, \dots, p_kp1,p2,…,pk 。
- 考虑 a=p1p2…pk+1a = p_1p_2\dots p_k+1a=p1p2…pk+1 ,易知 a>2a > 2a>2 且 a≠pi(i=1,2,…,k)a\ne p_i\ (i = 1, 2, \dots, k)a=pi (i=1,2,…,k) ,所以 aaa 必是合数(aaa 不在假设的有限个素数中)。从而知必存在素数 ppp ,使得 p∣ap\mid ap∣a 。
- 又由假设,知 ppp 为有限个素数之一且必等于某个 pjp_jpj ,于是 p=pjp = p_jp=pj 一定整除 p1p2…pkp_1p_2\dots p_kp1p2…pk 。
- 根据性质1.1.3,有 p∣a−p1p2…pk=1p \mid a - p_1p_2\dots p_k = 1p∣a−p1p2…pk=1 。由于 p=pj≥2p = p_j \ge 2p=pj≥2 ,这一推论是不可能的,矛盾。
- 因此,假设是错误的,即素数必有无穷多个。于是,aaa 可能是素数(此时 aaa 就是比 pkp_kpk 更大的素数)、也可能是合数……
设 p1=2,p2=3,p3=5,p4=7,p5=11,…p_1 = 2, p_2 = 3, p_3 = 5, p_4 = 7, p_5 = 11, \dotsp1=2,p2=3,p3=5,p4=7,p5=11,… 是全体素数按大小顺序排成的序列,以及 ak=p1p2…pk+1a_k = p_1p_2\dots p_k + 1ak=p1p2…pk+1 ,直接计算可得:
a1=3,a2=7,a3=31,a4=211,a5=2311,a6=59⋅509,a7=19⋅97⋅277,a8=347⋅27953a9=317⋅703763,a10=331⋅571⋅34231\begin{aligned} &a_1 = 3, a_2 = 7, a_3 = 31, a_4 = 211, a_5 = 2311, \\ &a_6 = 59\cdot 509, a_7 = 19\cdot 97 \cdot 277, a_8 = 347 \cdot 27953 \\ &a_9 = 317 \cdot 703763, a_{10} = 331 \cdot 571 \cdot 34231 \end{aligned} a1=3,a2=7,a3=31,a4=211,a5=2311,a6=59⋅509,a7=19⋅97⋅277,a8=347⋅27953a9=317⋅703763,a10=331⋅571⋅34231
不难发现,前五个 a1∼a5a_1 \sim a_5a1∼a5 是素数,后五个 a6∼a10a_6 \sim a_{10}a6∼a10 是合数,但 aka_kak 都有一个比 pkp_kpk 更大的素因数。
数论中目前还未解决的问题之一就是:不知道是否有无穷多个 kkk 使得 aka_kak 是素数,也不知道是否有无穷多个 kkk 使得 aka_kak 是合数。
【例1】求 303030 以内的素数。
解:利用定义1.1.2,直接逐个计算,可知 303030 以内的素数有:2,3,5,7,11,13,17,19,23,292, 3, 5, 7, 11, 13, 17, 19, 23, 292,3,5,7,11,13,17,19,23,29
【例2】试判断 127127127 的素性。
解:因为 11<127<1211 < \sqrt{127} < 1211<127<12 ,故只需用奇素数 3,5,7,113, 5, 7, 113,5,7,11 试除 127127127 即可,可知 127127127 为素数。
由此可得到求 111 到 nnn 之间素数的一种有效算法—— Eratosthenes
埃利特斯拉筛法。具体来说,为了求出不超过正整数 nnn 的全部素数,只要在 111 到 nnn 的列表中删去 111 和不超过 nnn 的所有正合数,则剩下的数即为所求素数。
由定理1.1.1知,不超过 nnn 的正合数 aaa 必至少有一个素因数 ppp ,满足 2≤p≤a≤n2 \le p \le \sqrt{a} \le \sqrt{n}2≤p≤a≤n ,故只要先求出不超过 n\sqrt{n}n 的全部素数 p1,p2,…,pkp_1, p_2, \dots, p_kp1,p2,…,pk ,并依此将 111 到 nnn 的列表中除了 p1,p2,…,pkp_1, p_2, \dots, p_kp1,p2,…,pk 本身以外的数中是「p1,p2,…,pkp_1, p_2, \dots, p_kp1,p2,…,pk 各自的倍数」的数全部删去,就等于删去了不超过 nnn 的全部正合数。然后再删去 111 ,剩下的正好就是不超过 nnn 的全部素数。
例如,欲求出不超过两位数的素数,先构造 111 到 999999 间正整数的列表,估计出 99<10\sqrt{99} < 1099<10 ,然后求出小于 101010 的素数 2,3,5,72, 3, 5, 72,3,5,7 ,在列表中删去 111 ,再从中分别删去大于 2,3,5,72, 3, 5, 72,3,5,7 且为其倍数的数,即得全部两位数的素数。可知,没有删去的数有:
2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,972, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, \\ 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 972,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97
共有 252525 个素数,它们就是不超过两位数的全部素数。若再从这 252525 个数出发,重复上述过程,就可以找出不超过 92292^2922(更准确的说是小于 1012101^21012 )的全部素数。
当然,数学过程和算法实现之间并不完全相同,学过埃式筛法的实现就会明白这一点。
【数论】第1章 整数的可除性(1) 整除概念与带余除法(2) 素数相关推荐
- 【数论】第1章 整数的可除性 第1节 整除概念与带余除法(3) 带余除法
本文属于「数论」系列文章之一.这一系列着重于数论算法的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏数论算法系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数论知识,本人 ...
- 【数论】第1章 整数的可除性 第1节 整除概念与带余除法(1) 整除及其性质
本文属于「数论」系列文章之一.这一系列着重于数论算法的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏数论算法系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数论知识,本人 ...
- 【数论】第1章 整数的可除性 第3节 最大公因数与辗转相除法(1) 最大公因数及其性质
本文属于「数论」系列文章之一.这一系列着重于数论算法的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏数论算法系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数论知识,本人 ...
- 【数论】第1章 整数的可除性 第2节 整数的表示
本文属于「数论」系列文章之一.这一系列着重于数论算法的学习和应用.由于内容随时可能发生更新变动,欢迎关注和收藏数论算法系列文章汇总目录一文以作备忘.此外,在本系列学习文章中,为了透彻理解数论知识,本人 ...
- 《Reids 设计与实现》第四章 整数集合和压缩列表
<Reids 设计与实现>第四章 整数集合和压缩列表 文章目录 <Reids 设计与实现>第四章 整数集合和压缩列表 一.整数集合 1.简介 2.整数集合的实现 3.升级 4. ...
- n个1组成的整数能被2013整除c语言,求大神解算法,“编写程序,求n至少为多大时,n个1组成的整数能被2013 整除。”...
编写程序,求n至少为多大时,n个1组成的整数能被2013 整除. 使用python黑科技: i = 1 while int('1' * i) % 2013: i += 1 print(i) 不使用黑科 ...
- 第二章 物理层 1 物理层的基本概念 [计算机网络笔记]
第二章 物理层 1 物理层的基本概念 本笔记参考书目: 计算机网络(第8版)谢希仁 2021王道计算机网络视频公开课 本节重点: 物理层功能和作用(了解名词即可) 转载请注明文章来源! 物理层接口特性 ...
- 求n至少为多大时,n个1组成的整数能被2013整除?
求n至少为多大时,n个1组成的整数能被2013整除? 思路:N对M取余,就是得出N不能整除的一部分,可以先把能整除N的一部分去掉,得到的数对N整除和本身整除结果是一样的. 案例:11除3等于3余2,那 ...
- Java基础算法题(01):判断101-200之间有多少个素数,并输出所有素数。 素数又叫质数,就是除了1和它本身之外,再也没有整数能被它整除的数。也就是素数只有两个因子。
查看所有50道基础算法题请看: Java的50道基础算法题 import java.util.ArrayList; import java.util.List; public class Detect ...
最新文章
- 8软件遇到的问题及解决方法_问题解决8步法
- 一个AndroidStudio项目的目录
- 重写 隐藏 java_Java中方法的重写与成员变量的隐藏
- html入门moz a,css 让文字不被选中之-moz-user-select 属性介绍
- Typescript 学习笔记七:泛型
- UVa 208 - Firetruck (回溯)
- 高职学生如何成为编程高手
- 介绍一个功能强大的 Visual Studio Code 扩展 - Rest Client,能部分替代 Postman
- rm 给你一个反悔的机会
- [Android]关于IntentService
- 常用的服务器系统,常用的服务器操作系统
- python分类下取得所有子类_如何找到给定名称的类的所有子类?
- 团队作业7——Beta版本冲刺计划及安排
- 三年的总结(技术篇)
- cmake使用教(二) install的使用
- linux 指定jvm djava.library.path_JVM命令
- 阿里巴巴优酷视频增强和超分辨率挑战赛-持续更新
- 【微信小程序】flex布局
- 软件开发的需求文档如何去写
- Java中使用isAlphabetic()办法无法解决判断一个char是英文字母,该用别的方法解决
热门文章
- Bean Searcher
- 戒除手机滥用经验贴(第一周)
- 红外视频图像行人检测算法综述
- 射频功放学习之四分之一波长阻抗变换器
- 细数 java9搭配eclipse oxygen 版本的坑
- maya RedShift头发色彩显示插件 1.0 下载及教程
- 这些跨国巨头都来了...第二届进博会六大亮点抢先看!
- 【读书笔记】【WebKit技术内 幕(二)】Chromium Webkit资源加载与网络栈、DOM树、HTML解释器、影子DOM、CSS解释器和样式布局、网页层次与渲染、绘图上下文、
- ROS-基于简单势场算法编写的线型编队领航
- 怎么下载Adobe Flash Player上的​视​频​ ​-​ ​多​媒​体​ ​?