题目
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
解答
#include<stdio.h>
int main(){
int a,b,c;
scanf("%d %d",&a,&b);
int mul=a*b;
do{
c=a%b;
a=b;
b=c;
}while(c!=0);
printf("%d %d",a,mul/a);
return 0;
}
求解方法:
求最小公倍数算法:最小公倍数=两整数的乘积÷最大公约数
求最大公约数算法:辗转相除法
有两整数a和b:
① a%b得余数c
② 若c=0,则b即为两数的最大公约数
③ 若c≠0,则a=b,b=c,再回去执行①
例如求27和15的最大公约数过程为:
27÷15 余1215÷12余312÷3余0因此,3即为最大公约数
如有问题或改进意见,欢迎与我交流!