最大公约数最小公倍数

#include <iostream>
using namespace std;
int a=100,b=20;
int gcd(int a,int b){
    return b==0?a:gcd(b,a%b);
    //注意最好先除再乘,否则可能溢出.因为a肯定可以被gcd整除
}
int lcm(int a,int b){
    return a/gcd(a,b)*b;
}
//gcd应用:
//判断 (x1*x2*...*xk)/p是不是整数
//用gcd进行约分,看p最后是不是1
int x[5]={1,2,3,4,5},p=10;
bool judge(){
    for(int i=0;i<5;i++)
        p=p/gcd(p,x[i]);
    return p==1;
}

//扩展的最大公约数算法:
//求一个解 y,x 使 ax+by=gcd(a,b)
int x1,y1;
void extended_gcd(int a,int b,int& x,int& y){
    if(b==0){
        x=1;y=0;//一组解就行
    }else{
        extended_gcd(b,a%b,y,x);//注意顺序变了
        y=y-x*(a/b);
    }
}
int main(){
    cout<<gcd(a,b)<<" "<<lcm(a,b)<<endl;
    cout<<judge()<<endl;
    extended_gcd(6,15,x1,y1);
    cout<<x1<<" "<<y1<<endl;
    return 0;
}

 

posted @ 2020-06-06 21:38  西伯利亚挖土豆  阅读(154)  评论(0编辑  收藏  举报