zoukankan      html  css  js  c++  java
  • 最大公约数与最小公倍数

      基本知识:

      定义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

  • 相关阅读:
    c学习第3天
    [BZOJ2124] 等差子序列
    CF710F String Set Queries
    Cow Hopscotch (dp+树状数组优化)
    CF528D Fuzzy Search (bitset)
    Gym 101667L Vacation Plans (dp)
    Codeforces 432D Prefixes and Suffixes (kmp+dp)
    [题解]BZOJ2115 XOR
    洛谷 P2921 [USACO08DEC]在农场万圣节Trick or Treat on the Farm
    从中国矢量图筛选出江苏省行政区划图
  • 原文地址:https://www.cnblogs.com/i-love-acm/p/3572502.html
Copyright © 2011-2022 走看看