您的位置:首页 > 其它

数论学习总结《一》

2013-08-28 20:49 246 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: