#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;
}