40-公约数和公倍数
内存限制:64MB 时间限制:1000ms Special Judge: No
accepted:30 submit:47
题目描述:
小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。
输入描述:
第一行输入一个整数n(0<n<=10000),表示有n组测试数据; 随后的n行输入两个整数i,j(0<i,j<=32767)。
输出描述:
输出每组测试数据的最大公约数和最小公倍数
样例输入:
复制
3 6 6 12 11 33 22
样例输出:
6 6 1 132 11 66
分析:
①、求最大公约数可以用递归的方法(gcd);
1 int gcd(int a, int b) 2 { 3 if(b == 0) return a; 4 return gcd(b, a%b); 5 }
②、最大公约数和最小公倍数相乘即就是对应的两个数直接相乘
③、最小公倍数 = a*b / gcd(a, b)
C/C++代码实现(AC):
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <cmath> 6 #include <stack> 7 #include <map> 8 #include <queue> 9 #include <set> 10 11 using namespace std; 12 const int MAXN = 510; 13 14 int gcd(int x, int y) 15 { 16 if(y == 0) return x; 17 return gcd(y, x%y); 18 } 19 20 int main() 21 { 22 23 int t; 24 scanf("%d", &t); 25 while(t --) 26 { 27 int a, b, temp; 28 scanf("%d%d", &a, &b); 29 temp = gcd(a, b); 30 printf("%d %d\n", temp, a*b/temp); 31 } 32 33 return 0; 34 }