1162 - C语言6.10
时间限制 : 1 秒
内存限制 : 32 MB
输入两个正整数m和n,求其最大公约数和最小公倍数。
题目输入
输入两个正整数m和n,用空格隔开。
题目输出
分别输出m和n的最大公约数和最小公倍数,用空格隔开。
请注意行尾输出换行。
输入/输出样例
输入格式
15 9
输出格式
3 45
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); }
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; }
Java解答
import java.util.*; public class Main { public static void main(String args[]) { Scanner cin = new Scanner(System.in); int a = cin.nextInt(); int b = cin.nextInt(); int m = Math.max(a, b); int n = Math.min(a, b); int temp,gcd,lcm; if(a<b){ temp = a; a = b; b = temp; } do{ temp = a%b; a = b; b = temp; }while(b!=0); gcd = a; lcm = (m * n)/gcd; System.out.printf("%d %d\n",gcd,lcm); } }
Python解答
def gcd(a, b): while b: a, b = b, a%b return a a,b = [int(x) for x in raw_input().split()] x = gcd(a,b) print "%d %d" %(x,a*b/x)