C语言——求两个数的最大公约数和最小公倍数

C语言——求两个数的最大公约数和最小公倍数求两个数的最大公约数的常用方法:※“辗转相除法”,又名欧几里得算法。基本方法如下:设两数为a和b(a>b),用a除以b,得a÷b=q……r,若r=0,则最大公约数为b;若r≠0,则再用b÷r,得b÷r=q……r’,若r’=0,则最大公约数为r’,若r’≠0,则继续用r÷r’……直到能够整除为止,此时的除数即为最大公约数。例如:a=99,b=18。a÷b=99÷18…

大家好,又见面了,我是你们的朋友全栈君。

求两个数的最大公约数的常用方法:

※“辗转相除法”,又名欧几里得算法。基本方法如下:

设两数为a和b(a>b),用a除以b,得a÷b=q……r,若r=0 ,则最大公约数为b;若r≠0 ,则再用b÷r,得b÷r=q……r’,若r’=0,则最大公约数为r’,若r’≠0,则继续用r÷r’……直到能够整除为止,此时的除数即为最大公约数。

例如:a=99,b=18。a÷b=99÷18=5……9不能整除,则继续b÷r=18÷9=2可以整除,则此时的除数9即为a和b两数的最大公约数。

①代码如下:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int t = 0;
	scanf("%d%d", &a, &b);//99,18
	while (a%b != 0){
		t = a%b;
		a = b;
		b = t;
	}
	printf("最大公约数为:%d\n", b);
	return 0;
}

首先,从键盘键入两个数a和b的值,变量t来保存余数。用while循环来判断能否整除,根据“辗转相除法”,先用第一个数a÷b再将除数b赋给a,余数赋给b,循环往复,直到能整除时结束循环,此时的除数b即为最大公约数。

(特别说明:若a<b,例如a=18,b=99。t=a%b=18;a=99;b=t=18。我们发现通过一次循环交换了a、b的值,这时就能满足a>b的条件了,在继续根据辗转相除的方法即可得到最大公约数。)

※拓展:求两个数的最小公倍数

关于最小公倍数与最大公约数,有这样的定理:最小公倍数×最大公约数=两数的乘积。

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

②代码如下:

#include <stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	int t = 0;
	scanf("%d%d", &a, &b);//18 99
	int m = a;
	int n = b;
	while (a%b != 0){
		t = a%b;//余数 9
		a = b;//18
		b = t;//9
	}
	printf("最大公约数为:%d\n", b);//9
	printf("最小公倍数为:%d\n",m*n/b);
	return 0;
}

首先,从键盘键入两个数a和b的值,变量t来保存余数。再设两个变量m、n来保存a、b的原值。

先根据辗转相除法求出最大公约数b’(过程同①),再由最小公倍数=两数的乘积÷最大公约数=m×n÷b’求得最小公倍数。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/145408.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 免费空间(免备案,无广告) 1G免费全能空间

    免费空间(免备案,无广告) 1G免费全能空间云邦互联免费空间(免备案,无广告)【1G免费全能空间,免备案,无广告】 1G全能空间+100M数据库(Mysql5.5/SQLServer2005) 支持的脚本:ASP、PHP(5.2-7.0)、.NET(2.0/4.0) 没有任何限制,详细功能请访问: https://www.yunzz.net/host/free.html(云邦互联) 推广

    2022年6月28日
    45
  • CentOS7没有图形化界面,怎么安装图形化界面

    CentOS7没有图形化界面,怎么安装图形化界面我们在安装CentOS7时,如果选择“最小化”安装那么系统就只有命令行界面,但是没有图形化界面,如下图:解决的完整步骤如下:1)开启CentOS7并登录root用户(一定要以root用户登录,其他普通用户的权限不够),其中localhostlogin为root,Password为root用户的密码。2)配置网络网卡,确保与外网连通(不连通则后面的操作都无法进行):在命令行界面中输入命令cd/etc/sysconfig/network-scripts/进入network-scripts

    2022年6月3日
    51
  • SqlSessionTemplate源码解析「建议收藏」

    SqlSessionTemplate源码解析「建议收藏」简介SqlSessionTemplate是mybatis-spring中最核心的一个类,我们知道MyBatis暴露出的最外层接口是SqlSession,所有的操作都是借助SqlSession接口的方法来完成的。MyBatis本身有一个默认实现类,也是我们在单独使用MyBatis时最常见的一个实现类DefalutSqlSession。而当我们将MyBatis与Spring整合时,便不再使用这个默认…

    2022年5月31日
    37
  • BigDecimal 比较大小

    BigDecimal 比较大小BigDecimala=newBigDecimal(101);BigDecimalb=newBigDecimal(111);//使用compareTo方法比较//注意:a、b均不能为null,否则会报空指针if(a.compareTo(b)==-1){System.out.println(“a小于b”);}if(a.compareTo(b)==0){System.out.println(“a等于b”);}if(a.compareT.

    2022年6月3日
    41
  • listview嵌套GridView_react grid layout

    listview嵌套GridView_react grid layoutGridView嵌套GridView,对子GridView及父GridView级联删除的问题http://blog.csdn.net/amandag/archive/2007/05/31/1633395.aspx利用GridView显示主细表并添加删除、打开、关闭功能(续)http://dotnet.aspx.cc/article/f73eeaa9-2bdc-47fd-a…

    2022年10月7日
    2
  • Java开发人员必须掌握的Linux命令(二)[通俗易懂]

    子曰:“工欲善其事,必先利其器。“学习应该是快乐的,在这个乐园中我努力让自己能用简洁易懂(搞笑有趣)的表达来讲解让知识或者技术,让学习之旅充满乐趣,这就是写博文的初心。本篇的旅行地图如下:第一站:小木 会先 登录酷炫的服务器,进入(cd)到神秘的magic 空间(目录),当我们忘记是怎么进入magic空间(目录)时候,可以使用(pwd)立刻得知目前所在的工作目录。第二站:在magi…

    2022年2月28日
    43

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号