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

来源:互联网 发布:spring boot 端口 编辑:程序博客网 时间:2024/06/03 13:49

定义

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

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

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

【一】更损相减法

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

有两个整数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;}






1 0
原创粉丝点击