本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
解析:学会求最大公约数(辗转相除法)和最小公倍数
#include <stdio.h>
//greatest common factor 递归
int gcf_Recursion( int a, int b) {
if ( a % b == 0 )
return b;
else
gcf_Recursion(b, a % b);
}
//greatest common factor 非递归
int gcf_Loop ( int a, int b ) {
int t;
while ( t = a % b ) {
a = b;
b = t;
}
return b;
}
void swap ( int *a, int *b ) {
int tmp = *a;
*a = *b;
*b = tmp;
}
int main () {
int m, n, gcf, lcm; //least common multiple
scanf("%d%d", &m, &n);
if ( m < n )
swap( &m, &n );
//gcf = gcf_Recursion( m, n );
gcf = gcf_Loop( m, n );
lcm = m * n / gcf; //最小公倍数 = 两数之积 / 最大公约数
printf("%d %d", gcf, lcm);
return 0;
}