版权声明:看看就好,如需转载,注明一下出处 https://blog.csdn.net/sinat_34337520/article/details/89018588
Description
输入两个正整数m和n,求其最大公约数和最小公倍数。
Input
两个整数
Output
最大公约数,最小公倍数
Sample Input
5 7
Sample Output
1 35
版本1:常规for
#include <stdio.h>
#include <stdlib.h>
//greatest common divisor(gcd)
//lowest common multiple(lcm)
//版本1:常规for
int main()
{
int i, m, n, gcd=1, lcm=1;
scanf("%d %d", &m, &n);
for(i=1; i<=m&&i<=n; i++)
{
if(m%i==0 && n%i==0)
gcd = i;
}
lcm = m*n/gcd;
printf("%d %d", gcd, lcm);
return 0;
}
版本2: while循环减法,最后得到最大公约数
版本2+:使用正负数
#include <stdio.h>
#include <stdlib.h>
//版本2:while循环减法,最后得到最大公约数
int main()
{
int m, n, s, gcd=1, lcm=1;
scanf("%d %d", &m, &n);
s = m*n; //提前保存
while(m != n)
{
if(m > n)
m -= n;
else
n -= m;
}
gcd = m;
lcm = s/gcd;
printf("%d %d", gcd, lcm);
return 0;
}
//版本2+:使用正负数
int main()
{
int m, n, s, gcd=1, lcm=1;
scanf("%d %d", &m, &n);
m = (m>0)? m:-m;
n = (n>0)? n:-n;
s = m*n; //提前保存
while(m != n)
{
if(m > n)
m -= n;
else
n -= m;
}
gcd = m;
lcm = s/gcd;
printf("%d %d", gcd, lcm);
return 0;
}
版本3:递归
#include <stdio.h>
#include <stdlib.h>
//greatest common divisor(gcd)
//lowest common multiple(lcm)
//版本3:递归
int hcf(int m, int n)
{
if(n != 0)
return hcf(n, m%n);
else
return m;
}
int main()
{
int m, n, gcd=1, lcm=1;
scanf("%d %d", &m, &n);
m = (m>0)? m:-m;
n = (n>0)? n:-n;
gcd = hcf(m, n);
lcm = m*n/gcd;
printf("%d %d", gcd, lcm);
return 0;
}