Description |
n(n<100)组测试数据。每组测试数据输入两个正整数a和b,输出这两个数的最大公约数和最小公倍数。 |
Input |
第一行输入整数n,表示n组测试数据。 以下每行输入两个正整数a和b,数据之间空格分隔。 |
Output |
按格式输出这两个数的最大公约数和最小公倍数。 每组输出数据占两行。 |
Sample Input |
1 45 36 |
Sample Output |
Greatest common divisor is 9 Lease common multiple is 180 |
#include<iostream>
#include<iomanip>
using namespace std;
int gongyueshu(int m, int n) {
int temp = n;
while (m % n != 0) {
temp = m % n;
m = n;
n = temp;
}
return temp;
}
int main() {
int n;
cin >> n;
while (n--) {
int a, b;
cin >> a >> b;
int c = gongyueshu(a, b);
int d = a * b / c;
cout <<"Greatest common divisor is " << c <<endl<<"Lease common multiple is " << d <<endl;
}
}
反思;使用方法:辗转相除法
最小公倍数=双数之积除以最大公约数;
另一种循环的方法,更易理解:
#include<bits/stdc++.h>
using namespace std;
int gcd(int a, int b) {
int t = max(a, b);
for(int i=t;i>=2;i--){
if (a % i == 0 && b % i == 0) return i;
}
}