C语言求最大公约数(带数学计算过程详解)

举报
倔强的石头 发表于 2024/12/14 23:09:08 2024/12/14
【摘要】 最大公约数——两个整数中公共约数(因数)的最大者求最大公约数的方法有很多,如质数因数分解法、短除法、辗转相除法、更相减损法。这里介绍使用代码实现求最大公约数的最简单的一种方法——辗转相除法比如有两个数,18和24第一步:用第一个数18作为被除数,第二个数24作为除数,两个数做除法,并求余数18%24=18,余数为18第二步:再将上一次计算中的除数作为被除数,余数作为除数,再进行除法运算求余数24%

 目录

概念介绍

辗转相除法 数学思想介绍

求最大公约数过程——

图解演示

代码思路

代码实现

代码改进

效果展示



概念介绍

最大公约数——两个整数中公共约数(因数)的最大者

求最大公约数的方法有很多,如质数因数分解法、短除法、辗转相除法、更相减损法。

这里介绍使用代码实现求最大公约数的最简单的一种方法——辗转相除法


辗转相除法 数学思想介绍

求最大公约数过程——

比如有两个数,18和24

第一步:用第一个数18作为被除数,第二个数24作为除数,两个数做除法,并求余数

                18%24=18,余数为18

第二步:再将上一次计算中的除数作为被除数,余数作为除数,再进行除法运算求余数

                24%18=6

第三步:重复上一次操作

                再将上一次计算中的除数作为被除数,余数作为除数,再进行除法运算求余数

                18%6=0

一直进行求余数操作,直到余数为0时,这时的除数就是初始两个数的最大公约数

注意:不管两个数谁大谁小,只要按此过程就可以得到最大公约数


图解演示

编辑


代码思路

要实现求两个数的最大公约数,明白了数学逻辑,实现就变得很简单

  1. 创建两个整型变量存储键盘输入的数据
  2. scanf函数读入数据(如果是多组输入的话,使用while循环读入数据)
  3. 求最大公约数的过程用一个循环来实现,余数为0就是循环结束的条件,在每一次循环过程中完成除数和被除数的调整


代码实现

#include<stdio.h>
int main()
{
	int a = 0, b = 0;
	while (scanf("%d %d", &a, &b) != EOF)
	{
		int c = 0;//用于临时存储余数
		while (c = a % b)//当余数不为0时,进行循环
		{
			a = b;//除数变为被除数
			b = c;//余数变为除数
		}
		printf("最大公约数为%d\n", b);
	}

}

代码改进

如果你仔细观察上面实现的这段代码的话,就会发现,最初我们输入的两个值在经过计算后被破坏了,计算完成之后就无法再使用初始的值

所以,我们将代码进行一下改进,每次用两个临时变量来拷贝输入的值,然后进行运算的时候只对临时拷贝的值进行操作,初始的两个值就被保留了下来。这样一个微不足道的小细节对于我们养成保持数据的安全和一致性是一个好习惯

#include<stdio.h>
int main()
{
	int a = 0, b = 0;
	while (scanf("%d %d", &a, &b) != EOF)
	{
		int c = 0;//用于临时存储余数
		int temp1 = a, temp2 = b;//拷贝要进行运算的两个整数
		while (c = temp1 % temp2)//当余数不为0时,进行循环
		{
			temp1 = temp2;//除数变为被除数
			temp2 = c;//余数变为除数
		}
		printf("%d和%d的最大公约数为%d\n", a,b,temp2);
	}

}

效果展示

编辑

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。