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