对 算术基本定理 的研究

写在前面:

  数论被誉为数学皇后,是研究整数性质的理论(好多人对数论的范围不清楚额)

  而算术基本定理是数论中的重要定理

  这篇文章是我对于算术基本定理的一些研究,研究的资料源自博客,百科,问答,持续更新

  非原创部分会标明出处

  原创部分转载请标明出处啦~

  若有侵权请告知啦

 

——图片来自youtube上的Fluffle Puff系列动画

 

目录

  一  单项式

  1. 证明√2是无理数

  2. 证明素数有无限个

  3. 欧拉函数

  4. 计算正整数N的正因数的个数

  5. 计算正整数N的所有正因数的和

  6. 判断nm是否可以被s整除

  7. n!质因数分解

  8. 判断n!能否被s整除

  二  从单项式到多项式

  1. GCD(a,b)*LCM(a,b) == a*b

  2. 更相减损术

  3. 欧几里得算法

  4. 拓展欧几里得算法

  5. 拓展欧几里得算法的多解

  1. 试除法分解大整数

  2. 整数分解费马方法

  3. Pollard Rho算法

 

 

结论

  唯一分解定理(代数基本定理)即算术基本定理

  算术基本定理可表述为:任何一个大于1的自然数 N,如果N不为[◹]素数,那么N可以唯一分解成有限个质数的乘积:

N == P1a1P2a2P3a3......Pnan

  这里P1<P2<P3......<Pn均为质数,其中指数ai是正整数

  这样的分解称为 的标准分解式

——bia度百科

 

  In number theory, the fundamental theorem of arithmetic, also called the unique factorization theorem or the unique-prime-factorization theorem, states that every integer greater than 1 either is a prime number itself or can be represented as the product of prime numbers and that, moreover, this representation is unique, up to (except for) the order of the factors.

For example,

1200 == 24 × 31 × 52 == 5 × 2 × 5 × 2 × 3 × 2 × 2 == ...

  The theorem says two things for this example: first, that 1200 can be represented as a product of primes, and second, that no matter how this is done, there will always be exactly four 2s, one 3, two 5s, and no other primes in the product.

  The requirement that the factors be prime is necessary: factorizations containing composite numbers may not be unique (e.g., 12 == 2 × 6 == 3×4==……).

  This theorem is one of the main reasons why 1 is not considered a prime number: if 1 were prime, then factorization into primes would not be unique; for example, 2 == 2 × 1 == 2 × 1 × 1 == ...

——Wikipedia

译:

这些因子必须是素数,因为包含合数的因式分解不是唯一的,例如,12==2×6==3×4==……

这个定理是导致1不被看作素数的主要原因之一

如果1是素数的话,那么就算分解成素数也不是唯一的,例如,2==2×1==2×1×1==……

  即算术基本定理的内容由两部分构成:

分解的存在性
分解的唯一性

——http://tieba.biadu.com/p/1680603442

  算数基本定理在密码学中发挥着重要作用

  可以说算术基本定理提供了一个观察数与数之间关系的角度

 

证明

  (某一种证法)

  假设存在大于1的自然数不能写成质数的乘积,把最小的那个称为n
  根据自然数的可除性(是否能表示成两个不是自身的自然数的乘积)分成3类:质数、合数和1

  ∵n 大于1,且根据假设,n 不是质数

  ∴n是合数

  ∵每个合数都可以分解成两个严格小于自身而大于1的自然数的积,设n == a*b,其中a 和b 都是介于1和n 之间(而不包括)的自然数

  ∴按照n 的定义,a 和b 都可以写成质数的乘积

  ∴n == a*b 也可以写成质数的乘积

  ∴假设失败

  ∴大于1的自然数必可写成质数的乘积

——http://tieba.biadu.com/p/1680603442

   (证明方法还有好多好多)

 

应用

 一  单项式

  • 证明√2是无理数

  (某一种证法)

  思路:

    利用算术基本定理证明√2不能写成两数之比即可

有理数是一个整数 和一个正整数 的比

无理数,也称为无限不循环小数,不能写作两整数之比

  假设√2 == a/b  (a,b∈Z*,且GCD(a,b) == 1)

  ∵(a/b)2 == (√2)2

  ∴a== 2b2

  ∴(1/2)a*a == b2

  ∵a∈Z*

  ∴b2 | (1/2)a  ……①式

若有非零整数a和整数b,存在整数q使得b=a*q

那么称b可被a整除,记为a|b

  ∵a,b∈Z*,且GCD(a,b) == 1,且a== 2b2

  ∴a>b>1

  ∴根据算术基本定理有

    a == P1x1P2x2P3x3......Pmxm

    b == P1y1P2y2P3y3......Pnyn  (P1,P2,P3...为连续的质数,x1,x2,x3...xm,y1,y2,y3...yn为非负整数,m,n为正整数)

  ∴带入①式  P12y1P22y2P32y3......Pn2yn | (1/2)(P1x1P2x2P3x3......Pmxm)

  ∴2P12y1P22y2P32y3......Pn2yn | (P1x1P2x2P3x3......Pmxm)  b有素数因子P0满足P0|a

  ∴P0|a且P0|b,与GCD(a,b) == 1相矛盾

  ∴假设失败,不存在√2 == a/b

  ∴√2是无理数

——https://zhidao.biadu.com/question/1797542160185315587.html

  • 证明素数有无限个

  思路:

    假设素数最大的为pn,利用算术基本定理证明还有比pn更大的素数

 

  假设素数只有有限的n个,最大的一个素数是pn

  设q为所有素数之积加上1,即q == ( 2 * 3 * 5 * …… * pn )+1

  根据假设,q不是素数

  根据算术基本定理,q可以被2、3、……、p中的数整除才对

  但是q被这2、3、……、p中任意一个整除都会余1

  则q是素数,与假设矛盾

  假设失败,素数有无限个

——https://wenda.so.com/q/1509592418215606?src=9999&cid-pre=1000204

  • 欧拉函数

  [◹]欧拉定理

φ(n) = n(1-1/p1)(1-1/p2)……(1-1/pn)

 

  • 计算正整数N的正因数的个数

  根据算术基本定理N = P1a1P2a2P3a3......Pnan(P1<P2<P3......<Pn均为质数,其中指数ai是正整数)

  记f(N)为正整数N的正因数的个数

  思路:

    根据计数原理,将相同的质因数看作一类,每一类中有ai+1种情况(0也视为一种情况),不同的质因数之间的关系就是类与类的关系,则得到

f(N) == (a1+1)(a2+1)(a3+1)...(an+1)

——https://blog.csdn.net/elbadaernu/article/details/75670038

  • 计算正整数N的所有正因数的和

  根据算术基本定理N = P1a1P2a2P3a3......Pnan(P1<P2<P3......<Pn均为质数,其中指数ai是正整数)

  记f(N)为正整数N的正因数的和

  思路:

    根据乘法结合律易得到

f(N) == (P10+P11+P12+……+P1a1)(P20+P21+P22+……+P2a2)……(Pn0+Pn1+Pn2+……+Pnan)

——https://blog.csdn.net/elbadaernu/article/details/75670038

  另外,

    当f(N) == 2N 时,称N为完全数

    当f(N) < 2N 时,称N为盈数

    当f(N) > 2N 时,称N为亏数

 

  •  判断nm是否可以被s整除

   给定正整数n,m,有好多好多个s(最多100000个),试判断nm是否可以被s整除

  (0 < n <= 109  0 <= m <= 300000  0 < s <= 1018)

  思路:

    问题的关键是nm好大好大的,可以选择利用算术基本定理分解nm来实现(s有好多好多个,显然不能分解s)

    既然是nm,不妨把每个Pini的指数ni乘上m,得到好多Pini*m

    ∵据同余定理,有

若有正整数a,b,c,d

满足a == b*c,且a≡0 (mod d)

那么有(((b mod d)*(c mod d)) mod d) ≡0 (mod d)

    ∴如果nm是否可以被s整除,那么必然在进行以下操作过程中,会出现temp==0 的时候

C++:

1 //int tot为n的质因数种类数
2 //int p[]为n的质因数
3 //int index[]为n的质因数分别对应的指数 
4 int temp=1; 
5 for(re int i=1;i<=tot;++i){
6     temp*=pow(p[i],index[i]*m);
7     temp%=s;
8 } 

    若出现了temp == 0,则nm是否可以被s整除

    若执行完了也没有出现temp == 0,则反之

 

  •  n!质因数分解

  给出正整数n,请编程输出n!的标准分解式,形如  4! == 2^3*3^1

  (n <= 10^6)

  思路:

    因为是阶乘,所以小于等于n的质数一定是其质因数,大于n的质数一定不是

    所以其标准分解式所含质数Pi已确定

    而对于质数Pi,在n!的分解式中的指数a== n/Pi1+n/Pi2+……+n/Pix  (n>=Pix)

    两部分拼到一起就好了

    n好小,这种方法可以的

 

  • 判断n!是否可以被s整除

  给定多对n,s(n,s都<=231),判断n!是否可以被s整除

  (Time limit: 3.000 seconds)

  思路:

    综合 n!质因数分解nm是否可以被s整除 的思路

    质数Pi,在n!的分解式中的指数a== n/Pi1+n/Pi2+……+n/Pix  (n>=Pix)

    执行 nm是否可以被s整除 中的操作即可

——https://blog.csdn.net/xieshimao/article/details/6342322 

 

二  从单项式到多项式

  • GCD(a,b)*LCM(a,b) == a*b

  举个例子:

  根据算术基本定理

76 == 22*191

57 == 31*191 

GCD(76,57)  ==  19  ==  191

LCM(76,57)  ==  228  ==  22*31*191

MUL(76,57)  ==  4332  ==  22*31*192

  即

  GCD(a,b)  选择每个质因子最小的指数作为结果中该质因子的指数

  LCM(a,b)  选择每个质因子最大的指数作为结果中该质因子的指数

  MUL(a,b)  选择每个质因子的指数的和作为结果中该质因子的指数

  而由于最小的指数和最大的指数可能相等,但不是同一个,两者之和就是每个质因子指数的和,即

GCD(a,b)*LCM(a,b) == a*b

  另外还有

  76 MOD 57 == 19 == 191

  a MOD b  a每个质因子的指数减去b中每个质因子的指数作为结果中该质因子的指数(但规定如果有一个质因子为负就取消本次所有减法,结果就是a本身)

  虽然这四种运算都还是在单项式的范围内,但这是从单项式走向多项式的关键所在

ps:无意间想到的,错了别打我

 

实现

  对于算术基本定理的实现即大整数的因数分解

  大整数分解目前仍是世界级难题,其有很多种算法,性能上各有差异

  下面是实现大整数分解的部分方法:

 

posted @ 2018-12-22 16:25  Antigonae  阅读(1530)  评论(0编辑  收藏  举报