求两个数的最大公约数
输入两个数,输出最大公约数
思路:
利用初等数学
具体讲:a
,b
的最大公约数等于a
, b%a
的最大公约数,b%a
,a
的最大公约数等于b%a
, a%(b%a)
最大公约数。直到某次求模等于0
,最大公约数就是较小的那个数。采用循环求模的方式。
int GCD(int a, int b) {
int r;
r = a % b;
while (r != 0) {
a = b;
b = r;
r = a % b;
}
return b;
}
求最小公倍数LCM:
即求最大公倍数的时候,直接:
求n个整数的最大公约数:
先求出两个数的最大公约数,再求次公约数和下一个整数的最大公约数,然后再继续,一直到所有的整数为止,采用循环结构,每次读入一个数。
int LCM(vector<int> num) {
int a, b, n, r;
n = num.size();
b = num[0];
for (int i = 1; i < n - 1; i++) {
a = num[i];
r = a % b;
while (r != 0) {
a = b;
b = r;
r = a % b;
}
}
return b;
}