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

Posted GetcharZp

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }

 


以上是关于nyoj 40-公约数和公倍数(gcd)的主要内容,如果未能解决你的问题,请参考以下文章

最大公约数gcd和最小公倍数lcm

最大公约数和最小公倍数

求GCD和LCM,即指求最大公约数和最小公倍数。

ACM数论之旅3---最大公约数gcd和最小公倍数lcm(苦海无边,回头是岸( ̄? ̄))

数论--最大公约数gcd和最小公倍数lcm

最大公约数(gcd)和 最小公倍数(lcm)——辗转相除法