浅谈数论
前言
若非特殊说明,本文所有的未知数均为整数
符号
-
⌊x⌋、⌈x⌉ x向下取整、向上取整
定义:
性质:⌊x⌋=−⌈−x⌉
-
a%b=c 也写成amodb=c 即c是a+kb的最小正值
注:这个定义虽然当b⩽0时也成立,但一般不考虑该情况,当b>0时,a%b⟺a−⌊ba⌋×b。
性质:
-
(a+b)modc=((amodc)+(bmodc))modc
-
(a×b)modc=((amodc)×(bmodc))modc
-
abmodc=(amodc)bmodc
-
gcd(a,b)=c即整数a,b的最大公约数是c
当gcd(a,b)=1时,称a,b互质。
性质:
- gcd(a,b)=gcd(b,a)
- gcd(a,0)=a
- gcd(a,b)=gcd(b,a%b)
- 裴蜀定理:gcd(a,b)是集合{ax+by∣x,y∈Z}中最小的正整数
- 4的推论:整数线性组合ax+by的值恰为gcd(a,b)的所有倍数
根据性质3求gcd(a,b)的时间复杂度最坏是O(logϕmin(a,b)),一般计为O(logmin(a,b))
性质3的证明:
设r=x%y,k=yx−r则r=x−ky,x=r+ky一方面:设d为x,y的公约数,x=l⋅d,y=m⋅d∴r=x−ky=l⋅d−k⋅md=(l−k⋅m)d∴d为md,(l−km)d的公约数∴d为y,r的公约数另一方面:设q为y,r的公约数,y=o⋅q,r=p⋅q∴x=r+ky=p⋅q+k⋅oq=(p+k⋅o)q∴q为(p+ko)q,oq的公约数∴q为x,y的公约数∴(d是x,y的公约数)是(d是y,r的公约数)的充分必要条件∴x,y的公约数集合A{d∣(d∣gcd(x,y))}等价于y,r的公约数集合B{q∣(q∣gcd(y,r))}∴gcd(x,y)=gcd(y,r)证毕
-
lcm(a,b)=c 即c是a、b的最小公倍数
性质:lcm(a,b)=gcd(a,b)ab
-
a∣b 读作a整除b 即**a是b的因数**
特别的,a∣0,1∣a
性质:
-
若a∣b,c∣b且a,c互质,则ac∣b
-
z若a∣b,a∣c⟺∀x,y a∣(bx+cy)
证明:
∵a∣b,a∣c∴a∣gcd(b,c)∴a∣k⋅gcd(b,c)∴a∣(bx+cy)
-
a≡b(modc) :a,b模c同余,即a%c=b%c
意义:
a≡b(modc)表明a,b模c的意义一样
举例:
求:(999999)999mod1000∵(−1)≡999(mod1000)∴(999999)999mod1000⟺[(−1)(−1)](−1)mod1000=(−1)mod1000=999
性质:
- (a%m+b%m)%m=(a+b)%m
- (a%m−b%m)%m=(a−b)%m
- (a%m×b%m)%m=(a×b)%m
- 若a≡b(modc)⟺c∣(a−b)
如果你只知道a%m,b%m的值可以进行三则运算推出(a+b)%m,(a−b)%m,(a×b)%m的正确值
这里没有除法运算,假如你只知道a%m,b%m的值,无法通过b%ma%m来计算ba%m的值,但还有其他方法来计算(后文会将具体处理方法)
正文
引例
- 求999999999mod1000
- 出以下方程未知数的通解或说明其无解
-
3x≡1(mod9)
-
3x≡2(mod8)
- 正整数,除以三余二,除以五余二,除以七余三,问这个数最小是多少?
- 已知一个大于1000的数末三位是123,把该数乘了一个正整数x,现在它的末三位为041,问乘的数x最小是多少?
- 已知一个大于1000的数末三位是201,把该数乘了一个正整数x,现在它的末三位为067,问乘的数x最小是多少?
- 是否存在21个连续的正整数,使得其中每个数均被至少一个2∼13 的素数整除?若有,请写出这21个正整数的中间数的最小值;若没有,请说明理由。
- 计算7105mod10
- 10321032的最后两位?
- 定义{f(1)=1当n为正整数时f(n)=nf(n−1),求f(2008)的最后3位。
- 求证:当n⩾3时,n(nn)≡nn(mod16)
- 求证:当n⩾3时,1989∣n(n(nn))−n(nn)
- 试证明非对称加密算法RSA算法的正确性并解释
扩展欧几里得定理
明确定义
扩展欧几里得定理(Extended Euclidean algorithm、EXGCD) 是一个用来求解形如ax≡b(modc)的线性同余方程的整数解的算法
转化
若想求解形如ax≡b(modc)的方程的通解或判断是否有解,不妨根据同余的性质,使原方程等价于ax+cy=b
接下来我们求解x,y即可
(我们不需要考虑a,c,b<0时的情况,因为我们可以将方程变为∣a∣(∣a∣a×x)+∣c∣(∣c∣c×y)=b的形式)
通解公式
我们先不研究该方程的解,我们研究该方程解的性质:
若x1,y1是方程ax+cy=b的一组解则ax1+cy1=b∴ax1+a⋅c⋅k−a⋅c⋅k+cy1=b∴a(x1+c×k)+c(y1−a×k)=b∴该方程的所有解为{x=x1+c×ky=y1−a×k
接下来只需要求解该方程的一组解即可
化简
我们不妨令a′=gcd(a,c)a,b′=gcd(a,c)b,c′=gcd(a,c)c则方程ax+cy=b 可以变形为a′x+c′y=b′
显然的a′,c′∈Z ,gcd(a′,c′)=1
根据gcd的性质,a′x+c′y可以表示为整数k×gcd(a′,c′)=k×1=k
∴a′x+c′y∈Z
若b′∈/Z,则a′x+c′y∈/Z,与上文矛盾。
所以,方程ax+cy=b有解,当且仅当gcd(a,c)∣b
接下来只需要求解方程a′x+c′y=b′
随堂测验:请写出下列方程的通解或说明其无解:
-
3x≡1(mod9)
解:
该方程等价于3x+9y=1提取a,b的最大公约数3,方程变为3(x+3y)=1∵3∤1∴该方程无解
-
化简:12x+4y=8
解:3x+y=2
再变形
方程变为了ax+by=c (注此时的a,b和上面不同,并且gcd(a,b)=1)
我们不妨研究方程 aX+bY=1中x,X,y,Y的关系
将方程二两边乘以c,变为 a(X⋅c)+b(Y⋅c)=c
接下来只需要解出方程aX+bY=1并且满足 gcd(a,b)=1的解X,Y然后再同时×c即可
求解
∵aX+bY=1,gcd(a,b)=1∴aX+bY=gcd(a,b)我们不妨多列几个形如这样的方程,然后令下一层的a等于上一层的b,下一层的a等于上一层的a取模上一层的b一直列下去,总有一层的b会等于0,求解出最后一层的X,Y,再寻找现相邻两层X,Y的关系即可(注:我这里会用下标表示层数)举例:133X+403Y=1403X1+133Y1=1133X2+4Y2=14X3+Y3=1X3+0⋅Y3=1解得X3=1,Y3为任意整数,令Y3=0
接下来我们研究Xn与Xn+1,Yn与Yn+1的关系对于Xn,Yn,有aXn+bYn=1对于Xn+1,Yn+1,有bXn+1+(a%b)Yn+1=1∴aXn+bYn=bXn+1+(a%b)Yn+1因为a,b大于0,所以根据余数的性质,原式变为aXn+bYn=bXn+1+(a−⌊ba⌋×b)Yn+1aXn+bYn=bXn+1+aYn+1−⌊ba⌋×bYn+1aXn+bYn=aYn+1+b(Xn+1−⌊ba⌋×Yn+1)∴Xn=Yn+1,Yn=Xn+1−Yn+1⌊ba⌋我们求解出最后一层的X,Y,然后拿这个公式反推出上一层的X,Y,一直推到第一层,就完事了!举例:266x≡4(mod806)266x+806y=4133x+403y=2133X+403Y=1403Y1+133Y1=1133X2+4Y2=14X3+Y3=1X4+0⋅Y4=1X4=1,Y4=0X3=Y4=0,Y3=X4−Y4×⌊14⌋=1−0×4=1X2=1,Y2=−33X1=−33,Y1=100X=100,Y=−33{x=X×2=200+403ky=Y×2=−66−133k
小结
首先扩展欧几里得的运算过程与欧几里得算法的运算过程基本一致,所以求解ax≡c(modb)的时间复杂度也是O(logmin(a,b))
-
已知一个大于1000的数末三位是123,把该数乘了一个正整数x,现在它的末三位为041,问乘的数x最小是多少?
根据题意,可以列出方程:123x≡41(mod1000)123x+1000y=41123X+1000Y=11000X1+123Y1=1123X2+16Y2=116X3+11Y3=111X4+5Y4=15X5+Y5=1X6=1,Y6=0X5=0,Y5=1X4=1,Y4=−2X3=−2,Y3=3X2=3,Y2=−23X1=−23,Y1=187X=187,Y=−23{x=X×41=7667+1000ky=Y×41=−943−1000k∵x⩽1000∴x=(7667+1000k)%1000=667
-
已知一个大于1000的数末三位是603,把该数乘了一个正整数x,现在它的末三位为201,问乘的数x最小是多少?
根据题意,可以列出方程:201x≡67(mod1000)201x+1000y=67201X+1000Y=11000X1+201Y1=1201X2+196Y2=1196X3+5Y3=15X4+Y4=1X5=1,Y5=0X4=0,Y4=1X3=1,Y3=−39X2=−39,Y2=40X1=40,Y1=−199X=−199,Y=40{x=X×67=−13333+1000ky=Y×67=2680−1000k∵x⩽1000∴x=(−13333+1000k)%1000=667
代码实现
long long mod(long long a, long long m) { return (a % m) + m % m; }
void exgcd(long long & x, long long & y, long long a, long long b) {
if (b == 0) {
x = 1ll, y = 0ll;
return;
}
exgcd(x, y, b, a % b);
swap(x, y);
y -= a / b * x;
}
tuple<pair<long long, long long>, pair<long long, long long>, bool> axbyc(long long a, long long b, long long c) {
if (a < 0 && b < 0) {
tuple<pair<long long , long long >, pair<long long , long long >, bool> result = axbyc(-a, -b, -c);
return result;
} else if (b < 0) {
tuple<pair<long long, long long>, pair<long long, long long>, bool> result = axbyc(a, -b, c);
get<1>(result).first = -get<1>(result).first;
get<1>(result).second = -get<1>(result).second;
return result;
} else if (a < 0) {
tuple<pair<long long, long long>, pair<long long, long long>, bool> result = axbyc(-a, b, c);
get<0>(result).first = -get<0>(result).first;
get<0>(result).second = -get<0>(result).second;
return result;
} else {
ulong long temp = gcd(a, b);
if (c % temp != 0) return {{0, 0}, {0, 0}, 0};
a /= temp, b /= temp, c /= temp;
long long x = 0, y = 0;
exgcd(x, y, a, b);
x *= c, y *= c;
return {{x, b}, {y, -a}, 1};
}
}
pair<long long, bool> SolveCongruenceEquation(long long a, long long b, long long mod) {
tuple<pair<long long, long long>, pair<long long, long long>, bool> result = axbyc(a, mod, b);
if (get<2>(result) == 1) {
pair<long long, long long> x = get<0>(result);
return {Mod(x.first, x.second + x.second), 1};
} else return {0, 0};
}
逆元
明确定义
在我们小学的时候,对实数a的倒数的定义是与相乘等于1的数,特别的,0没有倒数
令a的倒数为b,于是我们就可以用乘b来代替除以a的操作。
于是我们讨论在模意义下的倒数,也就是逆元
逆元的定义:满足ax≡1(modc)的整数x,称为a在模c意义下的逆元,计为模c下的a−1
注意:有的时候逆元并不存在。
求解
根据逆元的定义,可以用扩展欧几里得算法求解,还可以用其他算法求解,下文会做补充。
求解a模p的逆元的时间复杂度与扩展欧几里得算法一致,O(loga)
逆元的作用、意义
- 已知一个大于1000的数末三位是123,小景把该数乘了一个正整数x,现在它的末三位为041,问她乘的数x最小是多少?
- 已知一个大于1000的数末三位是603,小溪把该数乘了一个正整数x,现在它的末三位为201,问她乘的数x最小是多少?
没错,又是这两题。不知道你有没有发现,这两题的答案竟然是一样的。
仔细想想,第一题是要把123变为041,相当于除以三,第二题是要把603变为201,也是除以三,并且都是模1000意义下的。
不妨列出方程3x≡1(mod1000),解得x=667,于是我们便知道了,除以3跟乘667的意义一致。
然后用通解的公式,解出x的最小正值即可。再举一个例子:已知一个大于1000的数末三位是900,将该数乘了一个正整数x,现在它的末三位为300,问她乘的数x最小是多少?
x=667%(gcd(900,1000)1000)=7
我们不妨把问题抽象出来,并且建模:
有正整数A,B且B∣A但是不知道他们的值,只知道他们模m的值a=A%m,b=B%m问(BA)%m的值?当gcd(b,m)=1时因为A∣B,所以BA为正整数,令C=BA,则C为正整数∴A=BC∴a≡bC(modm)(①)∵gcd(b,m)=1∴b−1在模m下存在将①两边乘b−1,ab−1≡b×b−1×C(modm)∴ab−1≡C(modm)∴(BA)modm=a×b−1modm所以,我们证明了当gcd(b,m)=1时,(BA)%m=a×b−1modm于是,我们得到了(BA)%m的通解:ab−1+km,因为(BA)%m<m,所以这个答案变成唯一解ab−1−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−还没完,当gcd(b,m)=1时设d=gcd(b,m)∵a=Amodm,b=Bmodm∴A=a+xm,B=b+ym根据gcd的性质,因为b=Bmodm,所以gcd(B,m)=gcd(b,m)=d,又因为A∣B,∴gcd(A,m)=d设a′=da,b′=db,m′=dm∴BAmodm=b+yma+xmmodm=d×(b′+y×m′)d×(a′+x×m′)=b′+y×m′a′+x×m′令A′=a′+x×m′,B′=b′+y×m′问题转换为B′A′modm′,并且此时B′,m′互质,随后参照情况一,会得到x0+km′这一通解,但不同的是,这次是多解。
举例:
-
a=3,b=4,m=5时∵gcd(b,m)=1∴模m下b−1=4∴BAmodm=a×b−1modm=3×4mod5=2解释:2=48mod5
-
a=2,b=4,m=6时∵gcd(b,m)=1∴a=2,b=4,m=6⟺a=1,b=2,m=3∴模m下b−1=2∴BAmodm=a×b−1modm=1×2mod3=2,5解释:2=48mod6,5=420mod6
线性求逆元
如果要求1到n−1的逆元,如果用扩展欧几里得定理或者其他的算法一个一个算时间复杂度为O(nlogn),太慢。
不妨考虑以下算法:
对于1到n−1的一个数i,设r=nmodi,将p用余数表示法表示为n=⌊in⌋×i+r于是:⌊in⌋×i+r≡0(modn)⌊in⌋×i×(i−1×r−1)+r×(i−1×r−1)≡0(modn)⌊in⌋×r−1+i−1≡0(modn)i−1≡−⌊in⌋×r−1(modn)又∵1−1≡1(modp)∴i−1={当i=1时当i=1时1(−⌊in⌋×r−1)modn∵r=nmodi∴r<i∴只需要从1到n−1顺序遍历一遍,当遍历到i时,r一定算出来了,所以可以O(1)求出模n下的i−1∴该算法的时间复杂度为O(n)
线性求逆元的代码
vector<int> inv(n + 1, 1);
for (int i = 2; i <= n; i++) inv[i] = mod(-n / i * inv[n % i], n);
阶乘求逆元
求0到n阶乘模p的逆元
显然,n!1×n=n−11
∴(n−1)−1≡n−1×n(modp)
只需要先求出n的逆元,在从n到1遍历求逆元即可,时间复杂度为O(n)
阶乘求逆元的代码
vector<int> inv(n + 1);
inv[n] = inv(n, p);
for (int i = n; i >= 1; i--) inv[n - 1] = (inv[n] * i) % p;
中国剩余定理(孙子定理)
定义
对于形如⎩⎨⎧x≡a1(modm1)x≡a2(modm2)…x≡an(modmn)的方程组,称为线性同余方程组,而中国剩余定理 (Chinese Remainder Theorem) 算法可以求解
具体的,当gcd(m1,m2)=gcd(m2,m3)=⋯=gcd(mn−1,mn)=1时该方程组有解。
核心思想
不妨令M=Πi=1nmi,Mi=miM 。我们发现kMi当j=i时,kMi≡0(modmj),接下来令kMi≡ai(modmi),就可以达到kMi对于第i条是正确的,并且对于不是第i条的方程不影响。我们不妨将1至n的所有kMi求解并求和,就可以得到一个解,再将其取模M,就是答案的最小正值。
举例:
⎩⎨⎧x≡2(mod3)x≡3(mod5)x≡2(mod7)35k≡2(mod3)解得k=121k≡3(mod5)解得k=315k≡2(mod7)解得k=2x1=35×1+21×3+15×2=128x=128mod(3×5×7)=23
因为m两两互质,所以不用担心kMi≡ai(modmi)这些方程无解
小结
是否存在21个连续的正整数,使得其中每个数均被至少一个2∼13 的素数整除?若有,请写出这21个正整数的中间数的最小值;若没有,请说明理由。
解:不妨设中间数为x假如x能被某些2到13的质数整除:p1,p2⋯pn那么对于1⩽i⩽n,pi∣(x±k×pi)我们只需关注x±10之内的数,也就是说x不必整除11,13那便假设2×3×5×7∣x则:数字:x−10能整除的质数:2,5x−93x−82x−77x−62,3x−55x−42x−33x−22x−1?x2,3,5,7x+1?x+22x+33x+42x+55x+62,3x+77x+82x+93x+102,5我们这样做的好处是现在只有x−1,x+1没有整除一个素数,怎么办呢?显然,2,3,5,7∤x−1,x+1,那就让11,13分别整除x−1,x+1情况一:11∣x−1,13∣x+1∵2×3×5×7∣x,(x−1)∣11,(x+1)∣13∴x−1≡0(mod11),x+1≡0(mod13)∴可以列出方程组:⎩⎨⎧x≡1(mod11)x≡12(mod13)x≡0(mod210)可以根据中国剩余定理求解,解得x=9450+30030k答:x=9450
代码实现
pair<long long, bool> SolveCongruenceEquation(long long a, long long b, long long mod);
long long ChineseRemainderTheorem(vector<long long>& rmdi, vector<long long>& modi) {
long long factor = 1, result = 0;
for (long long x : modi) factor *= x;
for (int i = 0; i < rmdi.size(); i++) result += factor / modi[i] * SolveCongruenceEquation(factor / modi[i], rmdi[i], modi[i]).first;
return result % factor;
}
欧拉函数及定理
定义
ϕ(x):欧拉函数,即1∼x中与x互质的数的个数
特别的,ϕ(1)=1
性质
- ϕ(1)=1
- ϕ(p)=p−1(p为质数)
- ϕ(pb)=pb−pb−1(p为质数)
- 欧拉函数是积性函数,即若a,b互质,ϕ(a×b)=ϕ(a)×ϕ(b)
- ϕ(x)=x×Πi=1n(1−pi1)(n为x分解质因数后的质数个数)
- 欧拉定理:当a与x互质时,aϕ(x)≡1(modx)
性质的证明
性质3的证明:
回归定义,ϕ(pb)是1∼pb中与pb互质的数的个数即ϕ(pb)=pb−(1∼pb中与pb不互质的数的个数)那么1∼pb中与pb不互质的数到底有多少呢?因为p为质数,所以不互质pb的数一定是p的倍数:1p,2p,3p,⋯pb−1×p,一共有pb−1个∴ϕ(pb)=pb−pb−1
性质4的证明
还是刚才的那个思想,ϕ(a×b)=1到ab中与ab互质的数的个数
我们列出1∼ab的所有整数:
| 原数 | 原数模a的结果 | 原数模b的结果 |
|---|
| 1 | 1moda | 1modb |
| 2 | 2moda | 2modb |
| ⋮ | ⋮ | ⋮ |
| ab | 0 | 0 |
将右两列组成数对:(xmoda,xmodb)
因为gcd(a,b)=1,有:
gcd(x,ab)=1⟺gcd(x,a)=1 且 gcd(x,b)=1⟺gcd(xmoda,a)=1 且 gcd(xmodb,b)=1
所以,当且仅当x同时满足以下两个条件时,x与ab互质:
{gcd(xmoda,a)=1gcd(xmodb,b)=1
因为a和b互质,所有数对(xmoda,xmodb)互不相同(即不同x对应不同数对),因此原数x与数对(u,v)一一对应。
观察数对中的分量:
- 模a的余数取值范围是0∼(a−1),其中与a互质的数有ϕ(a)个
- 模b的余数取值范围是0∼(b−1),其中与b互质的数有ϕ(b)个
要同时满足两个互质条件,数对的选择数量为:
ϕ(a×b)=ϕ(a)×ϕ(b)
举例: a=3,b=5,则ab=15
| 原数 | 模3余数 | 模5余数 | 与15互质条件 |
|---|
| 1 | 1 | 1 | 是 |
| 2 | 2 | 2 | 是 |
| 3 | 0 | 3 | 否 |
| 4 | 1 | 4 | 是 |
| 5 | 2 | 0 | 否 |
| 6 | 0 | 1 | 否 |
| 7 | 1 | 2 | 是 |
| 8 | 2 | 3 | 是 |
| 9 | 0 | 4 | 否 |
| 10 | 1 | 0 | 否 |
| 11 | 2 | 1 | 是 |
| 12 | 0 | 2 | 否 |
| 13 | 1 | 3 | 是 |
| 14 | 2 | 4 | 是 |
| 15 | 0 | 0 | 否 |
表中加粗表示满足与该模数互质:
- 模3余数中与3互质的有2个:{1,2} (ϕ(3)=2)
- 模5余数中与5互质的有4个:{1,2,3,4} (ϕ(5)=4)
同时满足两个条件的数有8个,即ϕ(15)=8=ϕ(3)×ϕ(5)
性质5的证明
想要求x的值,不妨将它质因数分解,假设x=Πi=1npiaiϕ(x)=ϕ(Πi=1npiai)∵欧拉函数是积性函数∴ϕ(x)=Πi=1nϕ(piai)又∵pi为质数∴ϕ(x)=Πi=1n(piai−piai−1)=Πi=1npiai(1−pi1)=Πi=1npiai×Πi=1n(1−pi1)=xΠi=1n(1−pi1)证毕−−−−−−−−−−举例:计算ϕ(1000)1000=23×53ϕ(1000)=1000×(1−21)×(1−51)=1000×21×54=400
欧拉定理的证明
假设a与x互质,且0⩽a<x。考虑1至x中与x互质的所有整数,记为b1,b2,…,bϕ(x)。定义ci=bi×a和di=cimodx。序列b满足:{当i=j时, bi=bj,gcd(bi,x)=1.分析di的性质:问题:di=dj是否可能成立(对于i=j)?反证法:假设di=dj(其中i=j)。则ci≡cj(modx),即(bi×a≡bj×a(modx))。由同余性质,得a(bi−bj)≡0(modx)。由于gcd(a,x)=1,因此bi−bj≡0(modx)。又因1⩽bi,bj⩽x,故bi=bj,与条件i=j矛盾。因此,di=dj,即d满足互异性。互质性:gcd(di,x)=gcd(cimodx,x)=gcd(ci,x)=gcd(a×bi,x)。由于gcd(a,x)=1且gcd(bi,x)=1,有gcd(a×bi,x)=1。因此,gcd(di,x)=1,即d满足互质性。综上,序列d与b除了顺序可能不同,其他均相同。−−−−−−−−−−−−−−−示例:设x=5,则与5互质的数为b=1,2,3,4(即ϕ(5)=4)。取a=3,有ci=bi×3=[3,6,9,12]。计算di=cimod5=[3,1,4,2],与b相同但顺序不同。−−−−−−−−−−−−−−−欧拉定理的推导:由于d是b的重新排列,其乘积满足:b1b2⋯bϕ(x)≡d1d2⋯dϕ(x)(modx).又因di≡abi(modx),故:d1d2⋯dϕ(x)≡(ab1)(ab2)⋯[abϕ(x)](modx).因此,b1b2⋯bϕ(x)≡aϕ(x)[b1b2⋯bϕ(x)](modx).整理得:[aϕ(x)−1]b1b2⋯bϕ(x)≡0(modx).由于每个bi与x互质,其乘积b1b2⋯bϕ(x)也与x互质(因数均互质)。故aϕ(x)−1≡0(modx),∴aϕ(x)≡1(modx).证毕
欧拉定理
当gcd(a,n)=1时,ab≡abmodϕ(n)(modn)
证明:
设r=bmodϕ(n),k=ϕ(n)b−r∴ab≡akϕ(x)+r≡[aϕ(x)]k×ar≡1k×ar≡ar≡abmodϕ(n)(modn)
小结
-
计算7105mod10
∵gcd(7,100)=1∴7ϕ(10)≡74≡1mod10∴7105≡7100+1≡(74)26×71≡7(mod10)答:7我们发现欧拉定理的有降幂的作用,也就是欧拉定理的推论:gcd(a,n)=1时,ab≡abmodϕ(n)(modn)你可能会问,若gcd(a,n)=1时能不能降幂呢?后文会讲到「扩展欧拉定理」再补充一句,bmodϕ(n)是欧拉定理做到降幂的极限,不是最小的值!!!
-
10321032的最后两位?
其实就是要我们求10321032≡?(mod100)首先,10321032≡321032(mod100)设x≡321032(mod100),则:x≡0(mod4)x≡321032modϕ(25)≡3212≡712≡496≡(−1)6≡1(mod25)有方程组:{x≡0(mod4)x≡1(mod25)根据中国剩余定理,解得x≡76(mod100)∴10321032≡76(mod100)通过这个例题,我们学会了当底数与模数不互质时,可以用中国剩余定理求解,这就是为什么要把这一章放在中国剩余定理之后的原因。更具体的,令x=abmodm,将模数m质因数分解p1e1×p2e2×⋯pnen,先用欧拉定理求解ab≡x(modp1e1),再用中国剩余定理把互质的模数拼起来,就能求解出答案了(因为当i=j时,gcd(piei,pjei)=1)
-
定义{f(1)=1当n为正整数时f(n)=nf(n−1),求f(2008)的最后3位。
求200820072006⋯mod1000(注:这是2008(2007(2006⋯))mod1000的简化记法)因为gcd(2008,1000)=1∴先求出200820072006⋯mod8和200820072006⋯mod125,再用中国剩余定理拼起来。设x=200820072006⋯mod1000200820072006⋯≡(2×1004)20072006⋯≡220072006⋯×100420072006⋯≡0(mod8)...[1]200820072006⋯≡2008[20072006⋯modϕ(125)]≡2008[20072006⋯mod100]≡2008[72006⋯mod100](mod125)接下来求出720062005⋯mod100即可∵gcd(7,100)=1接下来观察7的幂次最后两位的规律:70≡1(mod100)71≡7(mod100)72≡49(mod100)73≡43(mod100)计算200620052004⋯mod4显然,它=0∴720062005⋯mod100=1∴x≡2008[72006⋯mod100]≡20081≡8(mod125)...[2]{x≡0(mod8)x≡8(mod125)解得x≡8(mod1000)答:008
-
求证当 n⩾3 时,nnn≡nn(mod16)
证明:
分两种情况讨论:
-
n为偶数:
∵n⩾3且2∣n∴n⩾4又∵n⩾2,nn⩾2 ∴n(nn)≡nn≡0(mod16)
-
n为奇数:
不妨先证明当n为奇数时,n4≡1(mod16)设n=2k+1∵(2k+1)4=16k4+32k3+24k2+8k+1∴n4≡16k4+32k3+24k2+8k+1≡8k2+8k+1≡16×2(k+1)×k+1≡1(mod16)(因为2(k+1)k=Ck+12是整数)∵2∤n,n4≡1(mod16)∴n(nn)≡nn(mod16)⟺nn≡n(mod4)⟺n≡1(mod2)⟺1≡0(mod1)证毕
你可能会发现,欧拉函数的降幂并不一定是最优的,就像这个例子:当n⩾3时n4≡1(mod16)
-
求证当 n≥3 时,1989∣nnnn−nnn
证明:
由 1989=9×13×17,只需证模 9,13,17 成立:
- 模 9:
- 若 3∣n,则 nn 和 nnn 均被 9 整除(∵ n≥3)。
- 若 3∤n,则需 nn≡nnn(mod6)。
∵ 模 2 和模 3 均同余(奇偶性一致且 n≡±1(mod3)),
∴ 成立。
- 模 13:
- 若 13∣n,则两边模 13 为 0。
- 若 13∤n,则需 nn≡nnn(mod12)。
∵ 模 4(偶数整除/奇数同余)和模 3 均同余,
∴ 成立。
- 模 17:
- 若 17∣n,则两边模 17 为 0。
- 若 17∤n,则需 nn≡nnn(mod16),
由问题4结论成立。
综上,原式被 1989 整除。
具体证明就留作课后作业吧∼
欧拉定理求逆元,费马小定理,扩展欧拉定理
欧拉定理求逆元
根据欧拉定理,当gcd(a,n)时, aϕ(n)≡1(modn)
∴a×aϕ(n)−1≡1(modn)
∴aϕ(n)−1+k×n是a模n的逆元
费马小定理
当n为质数且n∤a时,an−1≡1(modn)
证明(有多种证明方法,这里给出一种最简单的):
∵n∤a,n是质数∴gcd(a,n)=1根据欧拉定理,∴aϕ(n)≡1(modn)∵n为质数∴ϕ(n)=n−1∴an−1≡1(modn)证毕
费马小定理求逆元
根据费马小定理,当n为质数时,
根据费马小定理,有an−1≡1(modn)
∴a×an−2≡1(modn)
∴(an−2+kn)是a模n的逆元
扩展欧拉定理
定理
∀a,b,c∈N+,满足ab≡{ababmodϕ(c)+ϕ(c)b<ϕ(c)b⩾ϕ(c)(modc)
第一行表示abmodc当b<ϕ(c)时无法用欧拉定理降幂。
定理的证明
接下来我们证明第二行ab≡abmodϕ(c)+ϕ(c)(modc)
根据同余性质,若p,q互质,且x≡y(modp),x≡y(modq),那么x≡y(modpq)
根据引理1,只需证明对于每个piei,满足ab≡abmodϕ(c)+ϕ(c)(modpiei)
-
gcd(a,piei)=1时
根据欧拉定理aϕ(piei)≡1(modpiei)因为欧拉函数是积性函数∴aϕ(c)≡aϕ(piei)×k≡1(modpiei)根据余数表示法,有b=⌊ϕ(c)b⌋×ϕ(c)+bmodϕ(c)∴ab≡a⌊ϕ(c)b⌋×ϕ(c)+bmodϕ(c)≡a⌊ϕ(c)b⌋ϕ(c)×abmodϕ(c)≡1×abmodϕ(c)≡abmodϕ(c)×aϕ(c)≡abmodϕ(c)+ϕ(c)(modpiei)
-
gcd(a,piei)=1时
∵pi为质数,gcd(a,piei)∴pi∣a∴设a=npi∵b⩾ϕ(c),ϕ(piei)⩾ei,欧拉函数是积性函数∴有如下连等式b⩾ϕ(c)⩾ϕ(piei)⩾ei∵a=npi∴ab=(npi)b=nb×pib−ei×piei∵b⩾ei∴piei∣ab,ab≡0(modpiei)同理,abmodϕ(c)+ϕ(c)=(npi)bmodϕ(c)+ϕ(c)=nbmodϕ(c)+ϕ(c)×pibmodϕ(c)+ϕ(c)−ei×piei∴piei∣abmodϕ(c)+ϕ(c),abmodϕ(c)+ϕ(c)≡0(modpiei)∴ab≡abmodϕ(c)+ϕ(c)≡0(modpiei)
意义
不需要考虑a,c互不互质了。
在我们只会欧拉定理时,当a,c不互质时,使用的方法是拆模数。
现在会了扩展欧拉定理,就多了一种方法,但不代表前一种方法没用了,因为扩展欧拉定理降幂的模数很难达到最优
小结
第12题没什么好讲的(远没有扩展欧拉定理难证),就留作课后作业了
如有错误欢迎指出,转载请标明出处@renhongxuuu