本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
代码如下:
#include <stdio.h>
int main(){
int gcd(int a,int b){ //定义求最大公约数函数
int temp,h,x;
if(a<b){
temp=a;
a=b; //如果m<n交换两者的值
b=temp;
}
x=a%b; //运用辗转相除法求最大公约数
while(x!=0){
h=b%x; //除数与余数相除
b=x;
x=h;
}
return b; //返回最后一次的除数即为最大公约数
}
int m,n,max,min;
scanf("%d %d",&m,&n);
max=gcd(m,n);
min=m*n/max; //最大公因数*最小公倍数=a*b!!!
printf("%d %d",max,min);
}
本题重点是利用辗转相除法求最大公约数,然后利用(最大公约数*最小公倍数=两个数相乘) ,求出最小公倍数。