习题4-7 最大公约数和最小公倍数 (15分)
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
代码:
#include <stdio.h>
#include <math.h>
int main(){
int M,N,a,b;
int m,n,max,min,sum;
scanf("%d %d",&M,&N);
if(M<N){
a=N;
b=M;
}else{
a=M;
b=N;
}
if(M<=1000&&N<=1000){
for(int i=a; ;i--){
if(a%i==0&&b%i==0){
max=i;
break;
}
}
for(int k=1; ;k++){
if((a*k)%b==0){
min=k;
sum=a*k;
break;
}
}
}
printf("%d %d",max,sum);
return 0;
}
思路:
1.最大公约数。找出M、N中最大者,使之成为a。令i=a,假设它是最大公约数,那M、N应该都能整除a。如果整除不了,就令i依次减1,直到M和N都能整除i就结束。
2.最小公倍数。观察到题目中例子M=511,N=292,而最小公倍数是2044。因此要从最大者M入手。M和M的倍数的乘积能整除N的最小者就是最小公倍数。