您的位置:首页 > 其它

数论学习总结

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