欧几里得算法

给定两个正整数m和n,求它们最大公因子,即能整除m和n的最大正整数(a=b*c,则b和c都能整除a)

算法流程

  E1.以n除m,r为所得的余数(0<=r<n)

  E2.如果r为0,算法解决,n为答案

  E3.m=n,n=r;返回步骤E1

证明

  对于任意正整数q,存在 m=q*n+r

  1)如果r==0;n即为最大公约数

  2)如果r!=0;对于任意m和n的公约数g;

   因为r=m-q*n,所以g能整除r;

   所以m和n的公因子集合与n和r的公因子集合相同

   所以GDC(m,n)=GCD(n,r)=GCD(n,m%n)

代码实现

int GCD(int m,int n)
{
    int r;
    while(n!=0)
    {
        r=n;
        n=m%n;
        m=r;
    }
    return m;
}
View Code
原文地址:https://www.cnblogs.com/NoSoul/p/3294362.html