#include
using namespace std;
int gcd(int a, int b) {
int temp;
while (a % b) {
temp = b;
b = a % b;
a = temp;
}
return b;
}
int main() {
int aa, bb;
cout << "請輸入第一個數:";
cin >> aa;
cout << "請輸入第二個數:";
cin >> bb;
cout << "最大公約數:" << gcd(aa, bb) << endl;
return 0;
}
原理:gcd(a, b) = gcd(b, a % b),直到餘數為 0,當前除數即為最大公約數。
#include
using namespace std;
int lcm(int a, int b) {
if (a < b) swap(a, b); // 確保 a >= b
for (int i = 1; i <= b; ++i) {
if ((a * i) % b == 0) return a * i;
}
return a * b; // 理論上循環必會返回
}
// 更高效公式:lcm(a, b) = a / gcd(a, b) * b
int lcm_fast(int a, int b) {
return a / gcd(a, b) * b; // 先除後乘防溢出
}
int main() {
int aa, bb;
cout << "請輸入第一個數:";
cin >> aa;
cout << "請輸入第二個數:";
cin >> bb;
cout << "最小公倍數:" << lcm_fast(aa, bb) << endl;
return 0;
}