已知两个正整数m和n,求其最大公约数和最小公倍数。
输入格式:
两个用空格分隔的正整数m和n。
输出格式:
只有一行,为两个用空格分隔的正整数,依次代表m和n的最大公约数和最小公倍数。测试用例保证m、n及其最小公倍数可以用int存储。
样例">输入样例:
12 36
输出样例:
12 36
经典题目!
代码如下:
#include<stdio.h>
int main()
{
int m, n, i;
scanf("%d %d", &m, &n);
int sh = m, ch = n;
while (m % n != 0)
{
i = m % n;
m = n;
n = i;
}
printf("%d %d", n, sh * ch / n);
return 0;
}
这里用了辗转相除法!是求最大公约数的简单方法
然后最小公倍数的公式为:m*n=最大公约数*最小公倍数
下面为大家分享最小公约数的递归代码
#include<stdio.h>
int fack(int m, int n)
{
if (m % n == 0)
return n;
else
return fack(n, m % n);
}
int main()
{
int m, n;
scanf("%d %d", &m, &n);
printf("%d", fack(m, n));
return 0;
}
最小公约数其实也可以凭自己的理解写出来的
#include<stdio.h>
int main()
{
//最大公约数
int m, n,i,s;
scanf("%d %d", &m, &n);
m < n ? (s = m, m = n, n = s) : (m=m,n=n);
//m 为较大的数--n 为较小的数
for (i = n; i >=2; i--)
{
if (n % i == 0 && m % i == 0)
{
printf("%d", i);
return 0;
}
}
printf("1");
}
这就算是一个一个试了,
然后如果题目只求最小公倍数,除了上面的一个公式外,为大家再分享一个代码
#include<stdio.h>
int main()
{
int m, n;
scanf("%d %d", &m, &n);
int i = 1;
while (1)//死循环
{
if ((m * i) % n == 0)
{
printf("%d", m * i);
return 0;//结束循环
}
i++;
}
}
代码思路:写出m 的所有倍数!找到能整除n的最小的倍数就是最小公倍数
在网络上还有分解质数啥的求最大公约数的代码,但是都应该比这个抽象