例如:假如需要求 100 和18 两个正整数的最大公约数,用欧几里得算法,是这样进行的:
100 % 18 = 10
18 % 10 = 8
10 % 8 = 2
8 % 2 = 0
至此,最大公约数为2
思想:辗转相除法, 又名欧几里德算法(Euclidean algorithm),是求最大公约数的一种方法。它的具体做法是:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
#include<iostream>
using namespace std;
int main()
{
int n, m, num1, num2, temp;
cin>>num1>>num2;
m = num1;
n = num2;
while(num2 != 0)
{
temp = num1 % num2;
num1 = num2;
num2 = temp;
}
cout<<"最大公约数:"<<num1<<endl;
cout<<"最小公倍数:"<<n * m / num1<<endl;
return 0;
}
还有一个穷举法,最大公约数肯定是能同时被两个数整除。
最小公倍数就是两数相乘再去除以最大公约数。