6.中国残剩定理
典范的问题情势是“寻找一个数,除以2余1,除以3余2,除以7余5”其余各项可以被推广为一元线性同余方程组之后可以应用中国残剩定理来解决。举个例子,下面的问题可以被表示为三个线性同余式:“x ≡ 1 (mod 2), x ≡ 2 mod(3), x ≡ 5 mod (7)”
也就是一元线性同余式方程组:
- x ≡ a1 (mod n1)
- x ≡ a2 (mod n2)
- x ≡ a3 (mod n3)
- ....
- x ≡ ak (mod nk)
假设整数ni,nj两挥靴质,则对随便率性的n=n1n2...nk,方程组有解
对于随便率性的i,当0 <= di < ni,令ci=n/ni,令di为同余式cix=1(mod ni)的解(这个解法可以在应用扩大的欧几里德算法)。膳绫擎的线性方程组的通解可以给出为:
- c = a1c1d1 + a2c2d2 + ... + akckdk
评论辩论一下 Ni 的不必定都是两挥靴质的中国残剩定理的推广,如下 - 线性同余体系
- x≡a1(mod n1)
- x≡a2(mod n2)
- x≡a3(mod n3)
- ....
- x≡ak(mod nk)
有解,当对于每个 i != j 都有 iff gcd(ni,nj) 除 (ai-aj) ,且存在独一解 mod n,个中 n 是 n1,n2 ... nk 的最小公倍数
7. 二次方一致性
给定 q 和 n,如不雅等式 x2≡q(mod n) 具有解,则 q 称为二次残差的模 n。如不雅该方程不具有解,则q被称为“二次非残差”。例如,x2≡9(mod 15)具有解 x = 12,是以 9 是模 15 的二次余数。另一方面,等式 x2≡11(mod 15)没有解,是以 11 是二次非残差,为了简单起见,如不雅一个正方形可以取一些正整数 n 的情势(nk + q),则整数 q 是模 n 的二次余数。
发明具有质数模的二次一致性是否具有一个解,是有些轻易的:x2≡a(mod p)只有在(p-1)/ 2 = 1(mod p)时才具有解。 在这种情况下,可以应用 Shank-Tonelli 算法来获得解决筹划。
8. 欧拉 Phi 函数、除数函数、约数和、Mobius 函数
欧拉的 Phi 函数 (又称为常数函数,由φ表示)是天然数的函数,给出与响应的天然数互质的┞俘整数的数量。是以,φ(8) = 4, φ(9) = 6 等。 该函数的以部属性值得留意:
- 如不雅 p 是素数,则 φ(pk) = (p-1)pk-1
- φ 函数是乘法的,即如不雅 if (a,b) = 1 则 φ(ab) = φ(a)φ(b)。
- φ(n) 的值可以经由过程欧拉公式获得:令 n = p1a1 * p2a2 * .... * pkak 是 n 的素因子分化。则
- φ(n) = n * (1- 1/p1)) * (1- 1/p2)) * ... * (1- 1/pk))
- 以编程方法,如不雅我们欲求 1 到 n 的 φ , 那么我们可以异常好地应用筛选算法连同 φ 的乘法性质。中间思惟是:如不雅 n 是素数,则 φ(n) = n-1。不然,如不雅 n 是素数的幂,例如 n= pk,则 φ(n) = (p-1)pk-1。不然,对于某个素数p,令 n=pk*q 。应用乘法属性, 我们有 φ(n) = φ(pk)φ(q)
φ(n) 的两个重要属性:
- i. aφ(n) ≡ 1 (mod n) 每当 (a,n) = 1。 具体来说, 对于素数p,如不雅 p 不克不及整除 a,则 ap-1 ≡ 1 (mod p)。 这种特化也被称为费马小定理。
- ii. 令 d1, d2, ...dk 为 n 的所有除数(包含 n)。则 φ(d1) + φ(d2) + ... + φ(dk) = n
- σ(n) = ( (p1(a1+1) - 1) / (p1-1) ) * ( (p2(a2+1) - 1) / (p2-1) ) * ... * ( (pk(ak+1) - 1) / (pk-1) )
如不雅 σ(n) =2n,则 n 被称为“完全数”。换句话说, 完全数的┞锋因子(即除了自身以外的除数)的和好好等于它本身。
mobius函数µ(n) 在所有正整数中定义如下:
- 在 n 长短平方数(即 n 是不克不及被随便率性整数平方获得)并且 n 有偶数个不合的素数因子,则 µ(n) = 1
- 在 n 长短平方数(即 n 是不克不及被随便率性整数平方获得)并且 n 具有奇数个不合素数因子,则µ(n) = -1
- 在 n 是平方数,即 n 是某个整数的平方,则 µ(n) = 0
Mobius 函数是乘法分派性的,即 a 和 b 互为质数,则 µ(ab) = µ(a)*µ(b).
计算欧拉方程函数的一个有效公式可以用 mobius 函数给出:令 d1,d2,... dk 为 n 的所有除数。然后
- φ(n) = (d1 * mu (n/d1) ) + (d2 * µ(n/d2) ) + .... + (dk * µ(n/dk) )
这也可以写成:
- φ(n) = (µ(d1) * (n/d1) ) + (µ(d2) * (n/d2) ) + .... + (µ(dk) * (n/dk) )
应用筛选法计算 phi[n] 的 Java 实现如下:
- //read/get n
- int phi[] = new int[n+1];
- for(int i=2; i <= n; i++) phi[i] = i; //phi[1] is
推荐阅读
Edge Hub UI 微脆弱前宣布Edge浏览器已经上岸Android和iOS平台。如不雅用户想要测验测验在iOS平台上应用Edge浏览器,起首须要成为 Windows Insider项目成员,并在近期宣布的Windows 10预览>>>详细阅读
本文标题:每个程序员都应该知道的基础数论
地址:http://www.17bianji.com/lsqh/37732.html
1/2 1