最大公约数与最小公倍数
古希腊数学家欧几里德提出了求两个自然数的最大公约数的方法——辗转相除法,又称为欧几里德算法。
我们一般用(x1, x2, …, xn)表示n个正整数x1, x2, …, xn的最大公约数;用[x1, x2, …, xn]表示x1, x2, …, xn的最小公倍数。
求a,b的最大公约数和最小公倍数有以下4个常用的方法:
例如:
(24, 72, 108, 32) [24, 72, 108, 32]
= (((24,72), 108), 32) = [[[24,72], 108], 32]
= ((24, 108), 32) = [[72, 108], 32]
= (12, 32) = [216, 32]
= 4 = 864
【程序1】最大公约数
求两个自然数m,n的最大公约数
由公式(1):
读入m,n;
while n>0 {
r ← m mod n;
m ← n;
n ← r;
}
输出m;
【程序2】n个数的最大公约数和最小公倍数
编程求n个(n<=100)正整数Ai(Ai<=30000,1<=i<=n)的最小公约数和最小公倍数。假设解一定在长整数范围之内。
样例输入
4
24 72 108 32
样例输出
4 864
由公式(3) 和 (4):
1) read x;
2) gcd ← (gcd, x);
3) lcm ← (lcm, x);
4) goto 1).
C++ code:
#include<iostream>
using namespace std;
int gcd1(int x,int y){
if(y==0) return x;
else return gcd1(y,x%y);
}
int main(){
int x,y,r,n;
cin >> n >> x;
int gcd=x,lcm=x;
for(int i=2