本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
实现代码:
// <方法一>
// //测试点:一般整除:循环条件<=两数中的最小数
// 两数:m*n=最大公约数*最小公倍数
#include<stdio.h>
#include<math.h>
int main(){
int m,n,i,t,gcd=1;
scanf("%d %d",&m,&n);
t=m>n?n:m;//两数最小值
for(i=1;i<=t;i++){//最大公因数<=两数中的最小数
if(m%i==0&&n%i==0){
gcd=i;
}
}
printf("%d %d",gcd,m*n/gcd);
return 0;
}
// <方法二>
//使用欧几里德算法来计算两个数的最大公约数
#include<stdio.h>
int gcd(int a,int b){
return b?gcd(b,a%b):a;
}
int main(){
int m,n,r;
scanf("%d %d",&m,&n);
r=gcd(m,n);
printf("%d %d",r,m*n/r);
return 0;
}