题目描述
给定两个正整数x和y,求这两个正整数的最大公约数和最小公倍数。
要求使用如下接口(不能写单独的gcd和lcm函数,不符合要求的一律算错):
int get_gcdANDlcm(int x, int y, int *lcmptr);
函数返回最大公约数,lcmptr应该指向存储最小公倍数的对象。
输入
输入包含多组数据。
每组数据由空格分开的两个正整数x和y组成。x和y均不超过4000。
输出
对于每组输入,输出它们的最大公约数和最小公倍数,见样例。
样例输入 Copy
3 6
4 8
样例输出 Copy
GCD=3,LCM=6
GCD=4,LCM=8
代码
#include <stdio.h>
#include<math.h>
int get_gcdANDlcm(int x, int y, int *lcmptr)
{
int arr[2];
int t;
arr[1]=x*y;
if(x>y)
{
t=y;y=x;x=t;
}
while(x)
{
if(y%x==0)
{
arr[0]=x;
break;
}
t=y;
y=x;
x=t%x;
}
int q;
arr[1]=arr[1]/arr[0];
q=arr[0];
return q;
}
int main()
{
int x,g,y,a[2]={'\0'};
while(scanf("%d %d",&x,&y)!=EOF)
{
g=get_gcdANDlcm(x,y,a);
printf("GCD=%d,LCM=%d\n",g,x*y/g);
}
return 0;
}