1162 - C语言6.10
输入两个正整数m和n,求其最大公约数和最小公倍数。
Input
输入两个正整数m和n,用空格隔开。
Output
分别输出m和n的最大公约数和最小公倍数,用空格隔开。
请注意行尾输出换行。
Examples
Input
15 9
Output
3 45
Solution C
#include<stdio.h> int hcf(int a,int b){ int r; int temp; if(a<b){ temp=a; a=b; b=temp; } while((r=a%b)!=0){ a=b; b=r; } return b; } int lcd(int a,int b,int r){ return a*b/r; } int main(){ int a,b,r,h; scanf("%d%d",&a,&b); r=hcf(a,b); h=lcd(a,b,r); printf("%d %d\n",r,h); }
Solution C++
#include <stdio.h> #include <math.h> int main() { int m, n, t, a, b; scanf("%d %d", &m, &n); a = m; b = n; /* 比较m和n的大小,通过交换保证m <= n */ if (m > n) { t = m; m = n; n = t; } /* 进行欧几里得辗转相除法求出最大公约数,并保存在n中 */ while (m != 0) { t = m; m = n % m; n = t; } printf("%d %d\n", n, a / n * b); return 0; }