公约数和公倍数
时间限制:
1000 ms | 内存限制:
65535 KB
难度:
1
-
描述
-
小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数。
-
输入
-
第一行输入一个整数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
来源
- [苗栋栋]原创 上传者
问题分析:
最大公约数用欧几里得算法,即
1.当a和b同时等于0时,不存在最大公约数;
2.当a或b有一个等于0时,另一个即为最大公约数
3.当a、b都不为0时,GCD(a,b)=GCD(b,a%b).
代码:
#include <iostream> #include <stdio.h> #include <string.h> #include <math.h> #include <vector> #include <queue> #include <stack> #include <map> #include <string> #include <algorithm> using namespace std; /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int gcd(int a,int b){ if(a == 0 || b == 0){ return a==0?b:a; }else{ return gcd(b,a%b); } } int main(int argc, char** argv) { int n; scanf("%d",&n); while(n--){ int a,b; scanf("%d%d",&a,&b); int c=gcd(a,b); printf("%d %d\n",c,a*b/c); } return 0; }
-
第一行输入一个整数n(0<n<=10000),表示有n组测试数据;