求两个整数的最大公约数和最小公倍数
给大家分享两种解法吧,话不多说,看下面。
第一种:
(1)辗转相除法
两整数i和j:
① i%j得k
② 若k=0,则j即为两数的最大公约数
③ 若k≠0,则i=j,j=k,再执行①
最小公倍数=两数相乘除以最小公约数
具体代码
int main()
{
int i, j, k,n,x,y, tmp;
printf("请输入两个数:");
scanf_s("%d %d", &i, &j);
x = i;
y = j;//为得最小公倍数做准备
if (i > j)//这是因为先输入大数的话,有可能i%j==0;所以交换一下
{
tmp = i;
i = j;
j = tmp;
}
while (i%j)//当不等于0;碾转相除
{
k = i%j;
i = j;
j = k;
}
n = x*y / k;
printf("最大公约数=%d", k);
printf("最小公倍数=%d", n);
return 0;
}
第二种:
相减法
有两整数i和j:
① 若i>j,则i=i-j
② 若i<j,则j=j-i
③ 若i=j,则i(或j)即为两数的最大公约数
④ 若i≠j,则再回去执行①
具体代码:
int main()
{
int a, b,x,y;
printf("请输入两个数:");
scanf_s("%d %d", &a, &b);
x = a, y = b;
while (a != b)
{
while (a > b)
{
a -= b;
}
while (a < b)
{
b -= a;
}
}
printf("最大公约数=%d", a);
printf("最小公倍数=%d", x*y / a);
return 0;
}
运行结果:
其实有第三种方法的,但我懒得学习了。以后再说,哈哈哈,加油