美文网首页
数论-质数

数论-质数

作者: dachengquan | 来源:发表于2020-07-28 18:57 被阅读0次

定义:若一个正整数无法被1和他自身除外的任意自然数整除,则称该数为质数,否则为合数

质数的数量:在整个自然数集合中,质数的数量不多,分布比较稀疏,对于一个足够大的整数N,不超过N的质数大约N\div \ln N,每\ln N个数中大约有一个质数。

1判断质数的方法

1.1试除法

定理:若一个正整数N为合数则存在一个能整除N的数T,其中2 \leq T \leq \sqrt{N}

证明:

因为N是合数,所以一定存在一个T能整除N,并且2\leq T \leq N-1

反证法:假设命题不成立,T能整除N,T一定满足\sqrt{N} +1 \leq T \leq N-1。因为T能整除N,所以N/T的商也能整除N。N/T满足2 \leq N/T \leq \sqrt{N},令让T=N/T,与假设矛盾。假设不成立,原命题成立。

算法:扫描2~\sqrt N之间的所有整数,如果能整除N,说明N是合数。如果都不能整除N,那么N是质数

1.2Miller-Robbin

需要先掌握,费马小定理,为了证明费马小定理的欧拉定理,

1.2.1费马小定理

费马小定理:若p为素数,a是任意整数并且gcd(a,p) =1则有a^{p-1} \equiv 1  \pmod{p}

分析:考虑gcd(a,p)不等于1的情况

1)a=p^k其中k\geq1 ,gcd(a,p)=p

2)a=0gcd(a,p)=p

总结两种情况就是a取余p不为0。

思考:为什么这个公式会成立,看一种特殊情况。

3^6\equiv 1 \pmod{7}

可以看出当x按顺序从1到6排列时,3x\pmod{7}出现的数是1~6,但是顺序打乱了。可以得到公式

\prod_{i=1}^6x \equiv  \prod_{i=1}^6 3x \pmod{7}

\prod_{i=1}^6x \equiv  3^6\prod_{i=1}^6 x \pmod{7}

1 \equiv  3^6 \pmod{7}

定理:若p为素数,a是任意整数并且gcd(a,p)=1。那么数列1,2,3,4....p-1与序列a,2a,3a,4a....(p-1)a  (mod p)数相同,但是次序不同。

反证法:假设任意两个数j和k并且p-1\geq j>k\geq 1,使得ja\equiv ka \pmod{p}成立。因为ja与ka同余所以必定有p|(j-k)a,但是序列a,2a,3a,4a....(p-1)a都不能被p整除。这个公式永远无法成立ja\equiv ka \pmod{p},假设不成立。

费马小定理通过3^6的特殊情况,将3变为a,6变为p-1,7变p。就可以证明成功。

证明:费马小定理是欧拉定理的一种特殊情况。通常是证明欧拉定理,欧拉定理正确就说明费马小定理正确。下面我们看看欧拉定理

1.2.2欧拉定理

欧拉定理:若正整数a,m满足gcd(a,m)=1,则a^{\phi (m)}\equiv 1\pmod{m}

其中\phi(m)是欧拉函数,1到m中与m互质的数的个数。

定理:若gcd(a,m)=1并且gcd(b_i,m)=1其中1\leq b_i<m那么整数数列b_1,b_2,b_3...b_{\phi (m)}与序列ab_1,ab_2,ab_3...ab_{\phi (m)} \pmod{m}数相同,但是次序不同。其中b是按从小到大的顺序排序。

证明这个很简单,使用反证法假设任意两个数j和k属于数列b、并且j>k,使得ja\equiv ka \pmod{p}成立,那么必定有p|(j-k)a,但是这个p是不可能整除(j-k)a的,所以对于ab_i\pmod{m}来说任意两个数都不相同。

因为gcd(b_i,m)=1这样的b一共有\phi(m)个,并且gcd(a,m)=1。对于任意的gcd(ab_i,m)都等于1,并且互不相同。所以对于任意的ab_i一定能找到一个相等的b_j

其中当m是质数时,\phi(m)=m-1费马小定理显然成立。

1.2.3Fermat 素性测试

Miller-Robbin算法希望用费马小定理a^{p-1} \equiv 1  \pmod{p}判断x是否为质数。

使用公式a^{x-1} \equiv 1  \pmod{x}如果这个公式成立,那么x为质数。但是这个想法是错误的,因为x是质数这个公式一定成立,但是x不是质数这个公式不一定会失败。例如:2^{340}\equiv 1\pmod{341}

如果随机选取a,多判断几次呢只要判断判断的次数够多,那么是否可以避免这种情况呢。不过\forall a<561,a^{560}\equiv 1\pmod{561}对于任意的a都不满足。

只使用费马小定理是有很小的概率将合数错误判断为质数的。

1.2.4二次探测定理

如果p是素数,p>x,p>1那么x^2\equiv1\pmod p的唯一解就是x=1或x=p-1。

证明:x^2\equiv1\pmod p

p\vert x^2-1

p|(x-1)(x+1)因为p是大于x的质数,p=x+1\pmod p或者p=x-1\pmod p

1.2.5具体实现

对于随机的a,使用二次探测和费马小定理同时测试。只要测试的次数够多一定能得到答案。但是这样太慢了。

Miller-Robbin算法流程判断n是否是素数。

1将x-1分解成n-1=u*2^t的形式,其中u的最后一位必须是1。例如110_2变为11_2,1010_2变为101_2

2生成一个随机数a,求出x = a^u\pmod n

3令y = x^2 \pmod n,如果y是1,并且x\neq 1并且x\neq n-1说明n不是质数。否则让x=y执行下一步

4重复步骤3,t次如果每次都没证明n不是质数,并且最后y为1。那么说明p是质数。

5重复执行2,直到验证k次都成功。

二次探测和费马小定理同时测试成功率非常高,但是还是有可能误判,需要多次判断,最好判断8次。比较好的a有2,3,5,7,11,13,17,61。

时间复杂度大概是logn级别的吧。

2质数的筛选

给出从1到n之间的所有质数

2.1埃筛

埃筛的思想是,任何整数的倍数都不是质数。从1到n扫描,对于每个数标记他的倍数为合数。

1扫描到x,如果x是合数,那么x的倍数一定被比x小的数筛过一遍。每次从小到大只对质数的倍数进行筛选就可以了。

2如果x是质数x*k如果k<=x那么xk一定被k或者k的质因数筛过了。

避免掉这两种情况埃筛的时间复杂度就已经接近线性了。

2.2线筛

线筛的思想就是每个数只被最小质因子筛一次。埃筛2会筛一遍12,3会筛一遍12。

线筛首先生成一个数列p,p是从1到N的所有素数并且从小到大排序,p_1 = 2,p_2=3,p_3 = 5,p_4=7.....。从1到n扫描x,对于任意一个数x,对于i从1到p.length()扫描标记xp_i是合数,如果p_i是x最小的质因子。那么停止扫描因为如果让i接着+1,那么对于xp_{i+1}来说,x的最小质因子是p_{i}但是他被p_{i+1}标记为合数。如果p_i不是x最小的合数那么对于xp_i的最小质数一定是p_i。每个合数只会被他最小的质因数标记一次。所以时间复杂度是O(N)

3质因数分解

3.1算数基本定理

任何一个大于1的正整数都能被唯一分解为有限个质数的乘积,可写作:

N=p_1^{c_1}p_2^{c_2}...p_n^{c_n}其中c_i是正整数,p_i是质数,且满足p1<p2<...<pm

3.2试除法

试除法扫描2~\sqrt{x} 直接的每个数d,如果d能整除N,则从N中除掉d的所有因子,同时累计d的个数。最后剩余的N如果是1,那么说明我们已经扫描完了d的所有质因子。否则N就是剩下的那个质因子。

3.3Pollard's Rho

3.3.1生日悖论

反面思考,对于一个人来说与其他人生日都不同的概率。对于第一个人是365/365选择任何一天都可以。对于第二个人来说是364/365不能和第一个人选择同一天。所以一个班n个人生日都不同的概率是\prod_{i=1}^{n}(1-\frac{i-1}{365} )

当n为23时,一个班中有生日相同的概率就到50%以上了,当n为50时一个班有相同生日的概率达到了97%

3.3.1Pollard算法流程

1使用Miller-Robbin判断n是否是质数,如果n是质数,那么直接返回n

2找到一个p,p能整除n,分别使用pollard计算p与n/p

Pollard's Rho算法本身看着不优秀,关键是寻找这个p的难度大。首先进行一个优化寻找p,p = gcd(x,n)这样不止判断了x,还判断了x的质因子。这种做法正是根据生日悖论,加入比较的数越多,比较成功的概率会以指数上升。x的选择通常采用两个数p1,p2相减的绝对值得到,p1 = p1^{2}+c。其中c是一个常数。这样x的值每次重复的概率比较小,但是我也不知道为什么。另外p1和p2计算的过程中可能遇到环,因此要让两个走的步伐不一致,如果p1==p2说明出现环。

这就是算法的一个完整过程,看着并不快,但是期望时间复杂度是O( n^{\frac{1}{4}})

相关文章

  • 数论-质数

    定义:若一个正整数无法被1和他自身除外的任意自然数整除,则称该数为质数,否则为合数。 质数的数量:在整个自然数集合...

  • 18-04-18 回顾 可汗学院:计算数论

    关键字 计算数论: 时间复杂度 空间复杂度 质数 合数 sieve of eratosthenes ,质数定...

  • 数学知识

    一、数论 首先需要掌握质数的定义,判断一个数是否是质数的试除法、Miller–Rabin等。学习筛法,求出1~N之...

  • 产品经理要懂点数学(2)

    关键词:对称加密算法,RSA算法,素数(质数),素数分布,数论。 历史 1976年以前,所有的加密方法都是同一种模...

  • LUOGU 2257 YY的GCD - 莫比乌斯反演

    Description神犇YY虐完数论后给kAc出了一题:给定求且为质数的有多少对。kAc不想做,并把这道题扔给了...

  • 2020-01-22(学习笔记附录)

    数论概论 同余式、幂与费马小定理 费马小定理:p为质数,a除以p不为0,则a^(p-1) 除以p余1 欧拉公式:若...

  • 育才少儿真题-最大质因数

    质数是数论里最重要的,少儿班考试或数学竞赛几乎是必考的,今天介绍两道求最大质因数的真题。 题目①:11×11×11...

  • 11 关于因子与因数与素因子

    素因子(也称质因数/质因子):在数论里是指能整除给定正整数的质数。除了1以外,两个没有其他共同质因子的正整数称为互...

  • 利用好“8小时”以外的时间

    20世纪,有一道数学题将全世界的数学家都难倒了:“2的67次方减去1,结果到底是质数还是合数?”这是有关数论的题目...

  • Swift 计数质数 - LeetCode

    题目:计数质数 描述:统计所有小于非负整数 n 的质数的数量。 案例1: 质数的定义:质数 方案一:判断质数 代码...

网友评论

      本文标题:数论-质数

      本文链接:https://www.haomeiwen.com/subject/psjfrktx.html