C++求两个数的最大公约数—更相减损法和枚举法
Posted 和球球一起学编程
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++求两个数的最大公约数—更相减损法和枚举法相关的知识,希望对你有一定的参考价值。
今天,我们来看看求最大公约数的另外两种方法—更相减损法和枚举法。
我们之前用Scratch编写过(点击链接可阅读)的程序。现在我们来看看如何用C++来编写。
【例】求a,b两数的最大公约数。
一、更相减损法
程序如下:
using namespace std;
int a,b;
int gcd(int a,int b){
if(a==b) return b;
if(a<b) swap(a,b);//如果a<b,则交换a,b以确保a>=b
return gcd(b,a-b);
}
int main(){
cin>>a>>b;
cout<<gcd(a,b);
return 0;
}
更相减损法简单说就是如果a不等于b,就用a,b两数中较大的数减去较小的数,然后让a等于b,b等于a减b的差,重复执行直到a=b,此时的b为a,b两数的最大公约数。
上述C++程序中我们定义了求最大公约数的递归函数、调用了algorithm库中的swap函数。
下面我们来看看求最大公约数的另一种方法枚举法。
二、枚举法
我们知道对于两个整数a和b,它们共同的约数在1到min(a,b)之间,我们将这些数一一枚举,如果能同时整除a,b两个数并且是其中最大的,就是a,b两数的最大公约数。为了节约时间,我们可以从大到小枚举,这样第一个能同时整除a,b两数的数就是a,b的最大公约数。
using namespace std;
int a,b;
int gcd(int a,int b){
int i;
for(i=min(a,b);i>0;i--){
if(a%i==0 && b%i==0) break;//i能同时整除a,b时跳出循环
}//从大到小枚举i
return i;
}
int main(){
cin>>a>>b;
cout<<gcd(a,b);
return 0;
}
引申:类似地我们可以用枚举法求a,b两数的最小公倍数。
关于用枚举法求两数的最小公倍数的方法我们将在下期进行讲解。
欢迎加入知识星球:球球小课堂 获取arduino相关程序源代码
(球球自己经营的知识星球,会不定时地分享其学习成果)
关注视频号:杨老师编程小课堂,欣赏更多arduino小作品
以上是关于C++求两个数的最大公约数—更相减损法和枚举法的主要内容,如果未能解决你的问题,请参考以下文章