使用C++求最大公約數和最小公倍數

求最大公約數:輾轉相除法
求最小公倍數:兩數乘積除以最大公約數

直接上代碼吧。。。

#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是一個接近溢出的數字,乘以一個正整數,也還是會溢出的。具體使用看場景進行預防吧。

其它數可以自行驗證

謝謝閱讀

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章