数论-质数

定义:若一个正整数无法被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}})

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352