内存限制: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 }
原文:https://www.cnblogs.com/GetcharZp/p/9074364.html