nyoj 40-公约数和公倍数(gcd)

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 }

 


posted @ 2018-05-22 21:57  GetcharZp  阅读(226)  评论(0编辑  收藏  举报