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

文章介绍了两种计算两个自然数最大公约数(GCD)的方法:蛮力法,通过找到所有公因子并相乘得到;以及效率更高的辗转相除法(欧几里得算法),通过不断相除直至余数为0来求解。同时,文章提供了C++代码示例,并指出最大公约数与两数乘积除法求最小公倍数的关系。
摘要由CSDN通过智能技术生成

文章目录

 蛮力法

辗转相除法


 蛮力法

        可以使用短除法找到这两个自然数的所有公因子,然后将这些公因子相乘结果就是这两个数的最大公约数。例如: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;
} 


辗转相除法

        一种效率更高的算法是辗转相除法,又称为欧几里得算法,其核心思想是将两个数不断地辗转相除直到余数为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;
} 

 

END.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

顾老师不懂代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值