1162 - C语言6.10

通过次数

0

提交次数

0

时间限制 : 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)