最大公约数与最小公倍数

  基本知识:

  定义1  设a和b是两个整数,如果d|a且d|b,则称d是a与b的公因子。

  定义2  设a和b是两个不全为0的整数,称a与b的公因子中最大的为最大公约数,记为gcd(a,b)。

  定义3  设a与b是另个非零整数,称a与b的最小的正公倍数为最小公倍数,记为lcm(a,b)。

   最大公约数与最小公倍数具有如下一些性质

  (1)

  

  (2)设mab是正整数,则

  

  (3)用素数因子分解法求ab的最大公约数与最小公倍数:

   首先将ab进行因子分解成:

  

   则有:

  

   基本应用:

   欧几里得算法:

  定义4  设a=qb+r,其中a,b,q,r都是整数,则gcd(a,b)=gcd(b,r)。

  代码如下:

1 long long gcd(long long a,long long b)
2 {
3     if(b==0)return a;
4     else return gcd(b,a%b);
5 }
View Code

  扩展欧几里得算法:

  定义5  设a和b不全为0,则存在整数x和y,使得gcd(a,b)=xa+yb。

  拉梅定理:用欧几里得算法计算两个正整数的最大公因子时,所需除法次数不会超过两个整数中较小的那个十进制数的倍数的5倍。

  推论:求两个正整数a,b,a>b的最大公因子需要O(log2a)^3次的位运算。

  代码如下:

 1 int extend_gcd(int a,int b,int &x,int &y)
 2 {
 3     if(b==0)
 4     {
 5         x=1;y=0;
 6         return a;
 7     }
 8     else
 9     {
10         int r=extend_gcd(b,a%b,y,x);
11         y-=x*(a/b);
12         return r;
13     }
14 }
View Code

  复杂度:O(logN),其中N和a,b同阶。

  说明:

    

 

2014-02-27

原文地址:https://www.cnblogs.com/i-love-acm/p/3572502.html