1798 - 求最大公约数和最小公倍数

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB

给出两个正整数,求出它们的最大公约数和最小公倍数。

题目输入

第一行输入一个整数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

C语言解答

#include <stdio.h>
int gcd(int m, int n){
    return (n>0) ? gcd(n, m%n) : m;
}
int lcm(int m, int n){
    return m * n / gcd(m,n);
}
int main(){
    int n,a,b,c;
    scanf("%d",&n);
    while(n--){
        scanf("%d %d",&a, &b);
        printf("%d %d\n", gcd(a, b), lcm(a, b));
    }
    return 0;
}

C++解答

#include<iostream>
using namespace std;
int gcd(int a,int b){
	if(b==0)
		return a;
	else
		return gcd(b,a%b);
}
int main(){
	int n;
	cin>>n;
	while(n--){
		int a,b,max,min;
		cin>>a>>b;
		min=gcd(a,b);
		max=a*b/min;
		cout<<min<<" "<<max<<endl;

	}
}

Java解答

import java.util.Scanner;
public class Main
{
	public static void main(String[] args)
	{
		Scanner scan=new Scanner(System.in);
		int n=scan.nextInt();
		while(n-->0)
		{
			int i=scan.nextInt();
			int j=scan.nextInt();
			int x=i,y=j;
			if(i>=j){
				int a=i%j;
				while(a!=0){
					i=j;
					j=a;
					a=i%j;
				}
				System.out.print(j+" ");
			}else{
				int t;
				t=j;
				j=i;
				i=t;
				int a=i%j;
				while(a!=0){
					i=j;
					j=a;
					a=i%j;
				}
				System.out.print(j+" ");
			}
			System.out.println((x*y)/j);
		}
	}
}