小明被一个问题给难住了,现在需要你帮帮忙。问题是:给出两个正整数,求出它们的最大公约数和最小公倍数
分析:利用辗转相除法求出最大公约数
辗转相除法的核心就是不断的让两个数做除法运算。其原理基于两个整数的最大公约数等于其中较小的数和两数的相除余数的最大公约数。
假设两数为 x,y。
先令 z = x % y ;
之后 y 赋给 x 即令 x = y ;
再将 z 赋给 y 即令 y = z;
辗转相减,其终止条件为:y 等于0时。
而最小公倍数就等于两个正整数的积除以最大公约数
代码:
01.
#include <iostream>
02.
#include<stdio.h>
03.
using
namespace
std;
04.
int
main()
05.
{
06.
int
a,b,c,d;
07.
int
i,j,k;
08.
scanf
(
"%d"
,&a);
09.
while
(a--)
10.
{
11.
scanf
(
"%d %d"
,&b,&c);
12.
i=b;j=c;
13.
while
(c!=0)
14.
{
15.
d=b%c;
16.
b=c;
17.
c=d;
18.
}
19.
k=i*j/b;
20.
printf
(
"%d %d\n"
,b,k);
21.
}
22.
return
0;
23.
}