您的位置:首页 > 编程语言 > C语言/C++

C语言中求最大公约数以及求最小公倍数

2016-10-30 21:57 274 查看
定义:

最小公倍数:几个数公有的倍数叫做这几个数的公倍数、其中最小的一个叫做这几个数的最小公倍数。

最大公约数:几个数共有的约数叫做这几个数的公约数‘其中最大的一个叫做这几个数的最大公约数。

最小公倍数=两个数的乘积÷最大公约数。

【一】更损相减法:

用较大的数减较小的数’,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等即可。

有两个整数m和n:

①若m>n,则m=m-n;

②若m<n,则n=n-m;

③若m=n,则m(或n)是两个数的最大公约数

④若m≠n,则再回去执行①

例如求16和12的最大公约数过程为:

16-12=4(12>4);12-4=8(8>4);8-4=4(4==4)

最小公倍数=16*12/4=48

因此,4为最大公约数、48最小公倍数。

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
int m,n,a,b;
printf("please enter two numbers:");
scanf("%d %d", &m, &n);
a = m;
b = n;
while ((m- n) != 0)
{
if (m > n)m = m - n;
else n = n - m;
}
printf("The largest common divisor:%d\n", n);
printf("The least common multiple:%d\n", a*b/n);
system("pause");
return 0;
}
【二】辗转相除法

有两个整数m和n:

①m%n的余数x

②若x为0,则m(或n)即为两个数最大的公约数

③若x不为0,则a=b,b=x,返回①

例如求16和12的最大公约数为:

16%12=4;12%4=0因此4为最大公约数。

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
int m,n,x,a,b;
printf("please enter two numbers:");
scanf("%d %d", &m, &n);
a = m;
b = n;
while (n != 0)
{
x =m % n ;
m = n;
n = x;
}
printf("The largest common divisor:%d\n", m);
printf("The least common multiple:%d\n", a*b/m);
system("pause");
return 0;
}
【三】穷举法

从一枚举到m或n中最小的一个数,若m和n都可以被i整除,则i为最大公约数。

#include<stdio.h>
#pragma warning(disable:4996)
int main()
{
int m,n,i,a,b,x;
printf("please enter two numbers:");
scanf("%d %d", &m, &n);
a = m;
b = n;
for (i = 1; i <= a;i++)
{
if (m%i == 0 && n%i == 0)
x = i;
}
printf("The largest common divisor:%d\n", x);
printf("The least common multiple:%d\n", a*b/x);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: