6.2最大公约数GCD和最小公倍数LCM
最朴素的思想,枚举每个数的公约数再找出最大的那个,复杂度为O(n)
更好的方法:
辗转相除法(欧几里得算法)
#include<iostream>
#include<cstdio>
using namespace std;
int GCD(int a,int b){
if(b==0){
return a;
}else{
return GCD(b,a%b);
}
}
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d\n",GCD(a,b));
}
}
最小公倍数
最小公倍数=两数的乘积除以最大公约数
#include<iostream>
#include<cstdio>
using namespace std;
int GCD(int a,int b){
if(b==0){
return a;
}else{
return GCD(b,a%b);
}
}
int main(){
int a,b;
while(scanf("%d%d",&a,&b)!=EOF){
printf("%d\n",a*b/GCD(a,b));
}
}