数论学习总结
2013-08-04 20:25
381 查看
1.整数分解定理,即:d=p1^r1*p2^r2...pk^rk (pi为素数)
2.同余:
若a mod c==b mod c,记作 a b (mod c).
性质:
(1).a+d ≡ b+d (mod c)
(2).a*d ≡ b*d (mod c)
(3).a/d ≡ b/d (mod c) (d|a&&d|b&&gcd(d,c)==1)
(4).a^n ≡ b^n (mod c)
3.欧几里得算法:
gcd(a,b)=gcd(b,a mod b).
证:
gcd(a,b)=gcd(b,a-b),因为若a,b有最大公约数d,则a=k1*d,b=d2*d,则a-b=(k1-k2)*d也为d的倍数。
而 mod 相当于做多次减法。
引理:gcd(a,b)*lcm(a,b)=a*b;
证:
由整数分解定理得:若a=p1^r1*p2^r2...pk^rk,b=p1^m1*p2^m2...pk^mk;
则gcd(a,b)=p1^min(r1,m1)*p2^min(r2,m2)...pk^min(rk,mk)
lcm(a,b)=p1^max(r1,m1)*p2^max(r2,m2)...pk^max(rk,mk)
另一种gcd:
若a为偶数,b为偶数,则gcd(a,b)=2*gcd(a/2,b/2)
若a为奇数,b为奇数,则gcd(a,b)=gcd(b,a-b)
若a为奇数,b为偶数,则gcd(a,b)=gcd(a,b/2)
若a为偶数,b为奇数,则gcd(a,b)=gcd(a/2,b)
4.扩展欧几里得
背景:用于求形如 ax+by=c 的不定方程的解
证:
首先可以证明c一定为k*gcd(a,b),否则无解。
下面说明如何在gcd中求出x,y
x1*a+y1*b=gcd(a,b)
x2*b+y2*(a%b)=gcd(a,b)
可得:x1*a+y1*b=x2*b+y2*(a%b)
整理可得:x1*a+y1*b=y2*a+(x2-y2*a/b)*b
于是x1=y2,y1=x2-y2*(a/b)
代码:
void exgcd(long long a,long long b,long long &x,long long &y,long long &d)
{
if(b==0) {
x=1;y=0;d=a;
return;
}
exgcd(b,a%b,y,x,d);
y-=x*(a/b);
return;
}
用途:
(1).求解不定方程
(2).模线性方程组
形如:
x mod k1=r1
x mod k2=r2
...
x mod km=rm
我们的想法是:将 x mod ki=ri 转换成x=p*ki+ri,将 x mod kj=rj转换成x=q*kj+rj
整理得:p*ki+ri=q*kj+rj
可得:p*ki-q*kj=rj-ri
接下来用扩展欧几里得求出一组p,q,代入可得x,设为x0
此时x0为这两个方程的通解,然后就可以将两方程合并,得 x mod lcm(ki,kj)=x0
如此循环可得最终解
(3).求逆元
定义:若(a*b) mod p=1,则称a,b互为关于p的逆元
用途:(a/b) mod p=(a*k) mod p (k为b的逆元)
证:http://blog.sina.com.cn/s/blog_7c4c33190100s48a.html
2.同余:
若a mod c==b mod c,记作 a b (mod c).
性质:
(1).a+d ≡ b+d (mod c)
(2).a*d ≡ b*d (mod c)
(3).a/d ≡ b/d (mod c) (d|a&&d|b&&gcd(d,c)==1)
(4).a^n ≡ b^n (mod c)
3.欧几里得算法:
gcd(a,b)=gcd(b,a mod b).
证:
gcd(a,b)=gcd(b,a-b),因为若a,b有最大公约数d,则a=k1*d,b=d2*d,则a-b=(k1-k2)*d也为d的倍数。
而 mod 相当于做多次减法。
引理:gcd(a,b)*lcm(a,b)=a*b;
证:
由整数分解定理得:若a=p1^r1*p2^r2...pk^rk,b=p1^m1*p2^m2...pk^mk;
则gcd(a,b)=p1^min(r1,m1)*p2^min(r2,m2)...pk^min(rk,mk)
lcm(a,b)=p1^max(r1,m1)*p2^max(r2,m2)...pk^max(rk,mk)
另一种gcd:
若a为偶数,b为偶数,则gcd(a,b)=2*gcd(a/2,b/2)
若a为奇数,b为奇数,则gcd(a,b)=gcd(b,a-b)
若a为奇数,b为偶数,则gcd(a,b)=gcd(a,b/2)
若a为偶数,b为奇数,则gcd(a,b)=gcd(a/2,b)
4.扩展欧几里得
背景:用于求形如 ax+by=c 的不定方程的解
证:
首先可以证明c一定为k*gcd(a,b),否则无解。
下面说明如何在gcd中求出x,y
x1*a+y1*b=gcd(a,b)
x2*b+y2*(a%b)=gcd(a,b)
可得:x1*a+y1*b=x2*b+y2*(a%b)
整理可得:x1*a+y1*b=y2*a+(x2-y2*a/b)*b
于是x1=y2,y1=x2-y2*(a/b)
代码:
void exgcd(long long a,long long b,long long &x,long long &y,long long &d)
{
if(b==0) {
x=1;y=0;d=a;
return;
}
exgcd(b,a%b,y,x,d);
y-=x*(a/b);
return;
}
用途:
(1).求解不定方程
(2).模线性方程组
形如:
x mod k1=r1
x mod k2=r2
...
x mod km=rm
我们的想法是:将 x mod ki=ri 转换成x=p*ki+ri,将 x mod kj=rj转换成x=q*kj+rj
整理得:p*ki+ri=q*kj+rj
可得:p*ki-q*kj=rj-ri
接下来用扩展欧几里得求出一组p,q,代入可得x,设为x0
此时x0为这两个方程的通解,然后就可以将两方程合并,得 x mod lcm(ki,kj)=x0
如此循环可得最终解
(3).求逆元
定义:若(a*b) mod p=1,则称a,b互为关于p的逆元
用途:(a/b) mod p=(a*k) mod p (k为b的逆元)
证:http://blog.sina.com.cn/s/blog_7c4c33190100s48a.html
相关文章推荐
- 数论学习总结2
- 数论学习总结
- 1-16数论学习总结
- 数论学习总结 | 各种模板
- 数论专题学习阶段总结
- 【转载】学习总结:初等数论(3)——原根、指标及其应用
- 数论学习总结《一》
- 最大似然估计学习总结
- bootstrap学习总结
- C和C++语言学习总结
- 20135218 信息安全系统设计基础第二周学习总结
- nginx配置学习总结
- 20145336张子扬 《信息安全系统设计基础》第5周学习总结
- 201521123051《Java程序设计》第十四周学习总结
- 信息安全设计基础系统第十三周学习总结
- shell脚本学习总结06--数学计算
- HTML5学习总结-03 地理定位
- springmvc-学习总结-注解
- Spring Cloud与微服务学习总结(6)——认证鉴权与API权限控制在微服务架构中的设计与实现(四)