[算法设计与分析考点1]求两个数的最大公约数与最小公倍数

导读:本篇文章讲解 [算法设计与分析考点1]求两个数的最大公约数与最小公倍数,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

[算法设计与分析考点1]求两个数的最大公约数与最小公倍数

文章目录

 蛮力法

辗转相除法


 蛮力法

        可以使用短除法找到这两个自然数的所有公因子,然后将这些公因子相乘结果就是这两个数的最大公约数。例如:48和36的公因子有2、2和3,相乘得12,则48和36的最大公约数就是12,可验证。另外,根据数学关系,两个数的乘积再除以他们的最大公约数就是最小公倍数,例如48*36除以12得到144,则144就是他们的最小公倍数,可验证。

#include<iostream>
using namespace std;
//蛮力法
int function1(int m,int n){
	int factor=1;//所有公因子的乘积 
	//1是所有自然数的公因子,所以循环从2开始寻找两个数的公因子 
	for(int i=2;i<=m&&i<=n;i++){
		while(m%i==0&&n%i==0){
			factor*=i;
			m/=i;
			n/=i;
		} 
	}
	return factor;
} 
int main(){
	int a1,a2;
	cout<<"请输入两个自然数:";
    cin>>a1;
    cin>>a2;
    int n=function1(a1,a2);
    cout<<"两个数的最大公约数为:"<<n<<endl;
    int m=a1*a2/n;
    cout<<"两个数的最小公倍数为:"<<m<<endl;
	return 0;
} 

[算法设计与分析考点1]求两个数的最大公约数与最小公倍数


辗转相除法

        一种效率更高的算法是辗转相除法,又称为欧几里得算法,其核心思想是将两个数不断地辗转相除直到余数为0,即可得到最大公约数,最小公倍数求法同上。

#include<iostream>
using namespace std;
//辗转相除法
int function2(int m,int n){
	int r=m%n;
	//循环终止条件是余数为0 
	while(r!=0){
		//辗转相除 
		m=n;
		n=r;
		r=m%n;
	}
	return n;
} 
int main(){
	int a1,a2;
	cout<<"请输入两个自然数:";
    cin>>a1;
    cin>>a2;
    int n=function2(a1,a2);
    cout<<"两个数的最大公约数为:"<<n<<endl;
    int m=a1*a2/n;
    cout<<"两个数的最小公倍数为:"<<m<<endl;
	return 0;
} 

[算法设计与分析考点1]求两个数的最大公约数与最小公倍数

 [算法设计与分析考点1]求两个数的最大公约数与最小公倍数

END.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/93427.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!