本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
代码如下:
#include <stdio.h>
int main () {
int m,n,t,i;
int max,min;
scanf("%d %d",&m,&n);
if(m<n) {
t=m;
m=n;
n=t;
}
for(i=1; i<=n; i++) {
if(m%i==0&&n%i==0) {
max=i;
}
}
min=m/max*n;
printf("%d %d",max,min);
return 0;
}
注:求最大公约数可用的方法有很多,这里用的是最直接的方法——穷举法。从1到两数中的较小数一直穷举,其中只要存在可以同时整除两个用户数的数字就更新max,这样一直穷举到两个题设数中的较小数为止。max存放的就是最大公约数(两个数的最大公约数肯定不会超过这两个数)。
这道题两个数的最大公约数求出来了最小公倍数也就求出来了,它们之间存在这样的关系:最小公倍数= 其中一个数/最大公约数*另一个数