求最大公約數:輾轉相除法
求最小公倍數:兩數乘積除以最大公約數
直接上代碼吧。。。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
// greatest common divisor 最大公約數
long long gcd(long long t1, long long t2)
{
return t2 == 0 ? t1 : gcd(t2, t1 % t2);
}
// lowest common multiple 最小公倍數
long long lcm(long long t1, long long t2)
{
long long res = gcd(t1,t2);
return t1 * (t2 / res);
}
int main()
{
cout << gcd(100, 15) << endl;
cout << lcm(10, 150) << endl;
return 0;
}
運行結果:
5
150
在求最小公倍數時,原理應該是兩數先相乘再除以最大公約數,但是我寫了先讓t2除以最大公約數,然後再相乘,是爲了避免兩數直接相乘導致數據溢出。當然,這不會避免所有的溢出現象,如果t1是一個接近溢出的數字,乘以一個正整數,也還是會溢出的。具體使用看場景進行預防吧。
其它數可以自行驗證
謝謝閱讀