初等数论—————— gcd(辗转相除法)

在cs中gcd的应用很广      一般可以求两个数的最大公约数

#include<iostream>
#include<cstdio>
using namespace std;
int gcd(int a,int b)
{
    if(a==0)
    return 0;
    else
    return (b==0)?a:gcd(b,a%b);
}
int main()
{
    int a,b;
    cin>>a>>b; 
    cout<<gcd(a,b)<<endl;
    return 0;
}

证明:

观察上述可知只需证明gcd(a,b)==gcd(b,a%b)

设a=qb+r      r=a-qb

设d 为a b 的公因子   d|a     d|b

可得d也为b  r的公因子  (根据同余满足 + - *)

得证

 

a*b==gcd(a,b)*lcm(a,b)

不过还有一个拓展gcd  以后在来补坑

——————————————————————————————————

补坑了https://www.cnblogs.com/liuzhaojun/p/11238076.html

posted @ 2019-04-20 20:26  流照君  阅读(812)  评论(0编辑  收藏  举报