PTA的第二题
本题要求两个给定正整数的最大公约数和最小公倍数。
输入格式:
输入在一行中给出两个正整数M和N(≤1000)。
输出格式:
在一行中顺序输出M和N的最大公约数和最小公倍数,两数字间以1空格分隔。
输入样例:
511 292
输出样例:
73 2044
思考过程
由于需要求两个正整数的最大公约数与最小公倍数,我们知道最小公倍数等于两个数乘积除以最大公约数,因此我们只需要求得最大公约数即可。根据相减法可知:
若有两整数A和B:
① 若A>B,则A=A-B
② 若A<B,则B=B-A
③ 若A=B,则A即为两数的最大公约数
④ 若a≠b,则再回去执行①直至两者相等时跳出循环
代码如下:
#include<stdio.h>
#include<math.h>
int main()
{
int i,x,y,x1;
scanf("%d %d",&x,&y);
x1=x*y;
while(y!=x)
if(x>y)
x=x-y;
else
y=y-x;
printf("%d %d",x,x1/x);
return 0;
}
感觉数学基础牢固的话,代码只是一种辅助工具,算法才是灵魂哈哈