游客 Signup | Login
中文 | En

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;
}

Time Limit 1 second
Memory Limit 32 MB
Discuss Stats
上一题 下一题