C语言求两个整数的最大公约数和最小公倍数(辗转相除法和更相减损术)
2019-03-19 20:33
381 查看
C语言求两个整数的最大公约数和最小公倍数(辗转相除法和更相减损术)
编译环境VS2017
辗转相除法:用较小数除较大数,再用出现的余数(第一余数)去除除数,再用出现的余数(第二余数)去除第一余数,如 此反复,直到最后余数是0为止。如果是求两个数的最大公约数,那么最后的除数就是这两个数的最大公约数。
核心代码如下:
int z; while (z = x % y ) { x = y; y = z; }
更相减损术:
第一步:任意给定两个正整数;判断它们是否都是偶数。若是,则用2约简;若不是则执行第二步。
第二步:以较大的数减较小的数,接着把所得的差与较小的数比较,并以大数减小数。继续这个操作,直到所得的减数和差相等为止。
则第一步中约掉的若干个2与第二步中相的等数的乘积就是所求的最大公约数。
核心代码如下:
int z = 0; while (x!=y) { while (x % 2 == 0 && y % 2 == 0) { x = x / 2; y = y / 2; z++; } if (x > y) x = x - y; if (x < y) y = y - x; } if (z != 0) { printf("更相减损术:最大公约数为%d\n", 2*z*x); } else { printf("更相减损术:最大公约数为%d\n", x); }
两个或多个整数公有的倍数叫做它们的公倍数。两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。
最小公倍数=两数的乘积/最大公约数
int fun3(int x, int y, int z) { return x * y / z; }
具体实现如下:
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> int fun1(int x, int y)//辗转相除法 { int z; while (z = x % y ) { x = y; y = z; } return y; } void fun2(int x, int y)//更相减损术 { int z = 0; while (x!=y) { while (x % 2 == 0 && y % 2 == 0) { x = x / 2; y = y / 2; z++; } if (x > y) x = x - y; if (x < y) y = y - x; } if (z != 0) { printf("更相减损术:最大公约数为%d\n", 2*z*x); } else { printf("更相减损术:最大公约数为%d\n", x); }} //最小公倍数 int fun3(int x, int y, int z) { return x * y / z; }void main() { int a, b; printf("请输入两个整数\n"); scanf("%d %d", &a, &b); printf("辗转相除法:最大公约数是%d\n", fun1(a,b)); fun2(a, b);//更相减损术 printf("最小公倍数是%d\n", fun3(a, b, fun1(a, b))); system("pause"); }
运行结果如图
相关文章推荐
- 求两个整数的最大公约数和最小公倍数
- java 求两个整数的最大公约数和最小公倍数
- 【求两个整数的最大公约数和最小公倍数】
- (c++)写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
- 求两个正整数数的最大公约数和最小公倍数
- 求两个整数的最大公约数和最小公倍数
- 求两个整数的最大公约数和最小公倍数
- 第30讲-求两个整数的最大公约数(辗转相除法)
- 求两个整数的最大公约数和最小公倍数
- 输写两个函数,分别求两个整数的最大公约数和最小公倍数,用主函数调用这两个函数,并输出结果两个整数由键盘输入。
- 求两个整数的最大公约数和最小公倍数
- C++中实现求两个整数的最大公约数和最小公倍数
- C语言--辗转相除法求最大公约数和最小公倍数
- C++求两个整数的最大公约数和最小公倍数
- 求两个整数的最大公约数和最小公倍数
- 利用辗转相除法求两个整数的最大公约数和最小公倍数。
- [置顶] 编写两个函数,分别求两个整数的最大公约数和最小公倍数
- 求两个整数的最大公约数和最小公倍数
- 【C语言】求两个整数的最大公约数、最小公倍数
- C语言:写两个函数,分别求两个最大公约数和最小公倍数