蓝桥杯基础练习---输入两个正整数求最大公约数和最小公倍数(加思路)

蓝桥杯系统练习合集Java/C++版持续更新中 点击进入

原文链接:https://blog.csdn.net/special_hg/article/details/52450073

最大公约数:

如果有一个自然数a能被自然数b整除,则称a为b的倍数,b为a的约数。几个自然数公有的约数,叫做这几个自然数的公约数。公约数中最大的一个公约数,称为这几个自然数的最大公约数。
这个有几种方法,下面是两种不错的方法:
(1)求差判定法.

如果两个数相差不大,可以用大数减去小数,所得的差与小数的最大公约数就是原来两个数的最大公约数.例如:求78和60的最大公约数.78-60=18,18和60的最大公约数是6,所以78和60的最大公约数是6.

如果两个数相差较大,可以用大数减去小数的若干倍,一直减到差比小数小为止,差和小数的最大公约数就是原来两数的最大公约数.例如:求92和16的最大公约数.92-16=76,76-16=60,60-16=44,44-16=28,28-16=12,12和16的最大公约数是4,所以92和16的最大公约数就是4.

(2)辗转相除法.

当两个数都较大时,采用辗转相除法比较方便.其方法是:

以小数除大数,如果能整除,那么小数就是所求的最大公约数.否则就用余数来除刚才的除数;再用这新除法的余数去除刚才的余数.依此类推,直到一个除法能够整除,这时作为除数的数就是所求的最大公约数.

最小公倍数:

借助最大公约数求最小公倍数
步骤:   
一、利用辗除法或其它方法求得最大公约数   
二、 最小公倍数等于两数之积除以最大公约数。   
举例:12和8的最大公约数为4   
12×8/4=24   
两数的最小公倍数是24。

#include<iostream>
#include<time.h>
using namespace std;

int main(){

	int a, b, c, tem;
	cout << "请输入两个整整数:" << endl;
	cin >> a >> b;//输入两个整数求最大公约数
	int x = a;//将最初的m和n的值分别用x和y保存起来,后面计算最小公倍数时需要用到
	int y = b;
	if (a>b){
		tem = a;
		a = b;
		b = tem;
	}

	while (a%b != 0){//辗转相除法
		c = a%b;
		a = b;
		b = c;
	}
	cout << "最大公约数:" << b<<endl;
	cout << "最小公倍数:" << x*y/b << endl;
}

————————————————
版权声明:本文为CSDN博主「special_hg」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/special_hg/article/details/52450073

发布了28 篇原创文章 · 获赞 6 · 访问量 2866

猜你喜欢

转载自blog.csdn.net/weixin_45621658/article/details/102595813