前言
求两个数的最大公约数是一个很基础的数学问题,今天我来和大家分享用C语言求两个数的最大公约数的三种方法。
一、三种方法的基本原理和求解思路
1、辗转相除法
原理:
取两个数中最大的数做除数,较小的数做被除数,用最大的数除较小数,如果余数为0,则较小数为这两个数的最大公约数;
如果余数不为0,用较小数除上一步计算出的余数,直到余数为0,则这两个数的最大公约数为上一步的余数。
思路:
先判断两个数的大小,大的数赋值给n,小的数赋值给m。
用n%m如果结果为0则m的值为最大公约数
如果结果不为0,则将小的数赋值给n,将余数赋值给m
循环运算直到n%m==0成立
2、更相减损法
原理:
取两个数中的较大数做被减数,较小数做减数,用被减数减去减数,如果结果为0,则减数就是这两个数的最大公约数;
如果结果不为0,则将原减数作为新的被减数,上次的差作为新的减数,再进行运算,直到结果为0,则最大公约数为最终的减数。
思路:
先判断两个数的大小,将较大数赋值给n,将较小值赋值给m;
判断n-m==0是否成立
如果成立,则最大公约数为m;
如果不成立,则将n-m的值赋值给m,将原本的m的值赋值给n再进行运算和判断;
循环不成立时的过程直到成立,则最大公约数为m。
3、短除法
原理:
找出两个数的所有公约数,最大的那个就是最大公约数
思路:
先找出较小数,找约数时的限制条件就是不能超过较小数的值,所有公约数中最大的就是最大公约数
二、源代码以及运行截图
为了方便大家的交流和学习,我将程序的源代码放置在下方。
1、辗转相除法
int main() { int n = 0; int m = 0; int temp = 0; printf("请输入两个操作数:>"); scanf("%d %d", &n, &m); if (n < m) { temp = n; n = m; m = temp; } while (1) { if (n % m == 0) { printf("这两个数的最大公约数为%d\n", m); break; } else { temp = m; m = n % m; n = temp; } } return 0; }
运行截图:
2、更相减损法
int main() { int n = 0; int m = 0; int temp = 0; printf("请输入两个操作数:>\n"); scanf("%d %d", &n, &m); if (n < m) { temp = n; n = m; m = temp; } while (1) { if (n - m == 0) { printf("这两个数的最大公约数为%d\n", m); break; } else { temp = m; m = n - m; n = m; } } return 0; }
运行截图:
3、短除法
int main() { int n = 0; int m = 0; int temp = 0; int i = 1; int t = 0; printf("请输入两个操作数:>\n"); scanf("%d %d", &n, &m); if (n > m) { temp = n; n = m; m = temp; } for (i = 1; i <= n; i++) { if (n % i == 0 && m % i == 0) { t = i; } } printf("这两个数的最大公约数为%d\n", t); return 0; }
运行截图:
总结
以上就是今天要讲的内容,本文简单的介绍了用C语言求两个数的最大公约数的三种方法的思路,还进一步用展示了代码的运行结果验证了作者的思路。
本文的作者也只是一个正在学习C语言等编程知识的萌新,若这篇文章中有哪些不正确的内容,请在评论区向作者指出(也可以私信作者),欢迎大佬们指点,也欢迎其他正在学习C语言的萌新和作者进行交流。
最后,如果本篇文章对你有所启发的话,也希望可以支持支持作者,后续作者也会定期更新学习记录。谢谢大家!