3752 - 最大公约数和最小公倍数

通过次数

0

提交次数

0

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

输入k对正整数m,n,求m,n的最大公约数和最小公倍数。

题目输入

【输入文件】
    输入第一行有一个整数k,跟着有k行,分别是m,n。(1<=k<=100,1<=m,n<=1000)

题目输出

【输出文件】
    输出有k行,分别是每对数m,n的最大公约数和最小公倍数(用空格隔开)。

输入/输出样例

输入格式

3
24 18
12 9
14 28

输出格式

6 72
3 36
14 28

C语言解答

#include <stdio.h>

int fun ( int a , int b )
{
	int i , t ;
	
	if ( a < b )
	{
		t = a ;
		a = b ;
		b = t ;
	}

	if ( a % b == 0 )
	{
		return b ;
	}
	
	else
	{
		for ( i = b - 1 ; i >= 1 ; i-- )
		{
			if ( a % i == 0 && b % i == 0 )
				return i ;	
		}
	}	
}

int main ( void )
{
	int n , i , a , b , c ;
	scanf ( "%d", &n ) ;
	
	for ( i = 1 ; i <= n ; i++ )
	{
		scanf ( "%d%d", &a , &b ) ;
		
		c = fun ( a , b ) ;
		printf ( "%d %d\n" , c , (a * b / c ) ) ;
	}
	
	return 0 ;
}

C++解答

#include <iostream>
#include <stdio.h>
using namespace std;
int main()
{
	int k,m,n,a,b;
	scanf("%d",&k);
	while(k--)
	{
		int t;
		scanf("%d %d",&m,&n);
		if(m<n){
			a=n;b=m;
		}
		else
		{
			a=m;b=n;
		}
		while(b!=0)
		{
			t=a%b;a=b;b=t;
		}
		printf("%d %d\n",a,m*n/a);
	}
	return 0;
}