c++求两个数的最小公倍数和最大公因数(三种方法)

250 阅读1分钟

数字游戏(1)

穷举型

最大公约数: 思路:从a,b较小的数开始倒序寻找

#include<iostream>
using namespace std;
int main(){
int a,b;
if(a>=b){
for(int i=b;i>0;i--){
if(a%i==0&&b%i==0){cout<<i;break;}
}
}
else{
for(int i=a;i>0;i--){
if(a%i==0&&b%i==0){cout<<i;break;}
}
}
}

辗转相除法

思路: 1.a%b为余数; 2.若余数为0,则余数就是最大公约数; 3.若不为0,则a=b;b=余数;

#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b;
c=a%b;
while(c!=0){
a=b;b=c;c=a%b;
}
cout<<b<<endl;//这里我没判断c是否等于0;如果程序出错,则可能很难看出;
return 0;
}

相减法(辗转相除法变式)

还是两个整数a,b; 如果a>b:则a=a-b;如果a<b:则b=b-a; 判断a和b是否相同,相同则a或b为最小公倍数; 不同则重复上述操作

#include<iostream>
using namespace std;
int main(){}{
int a,b;
cin>>a>>b;
while(a!=b){
if(a>b)a=a-b;
else b=b-a;
}
cout<<a<<endl;//这里输出a和b都可以,而且因为懒我又把把判断a和b是否相等给省略了;
}

最小公倍数就是就是a*b/最大公约数;

//到这里我们的数字游戏(1)就结束了;下期再见;byebye "-_-";