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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Centos7安装配置Apache+PHP+Mysql+phpmyadmin

    Centos7安装配置Apache+PHP+Mysql+phpmyadminCentos7安装配置Apache+PHP+Mysql+phpmyadmin

    2022年4月23日
    43
  • Cutout Standard扣图软件「建议收藏」

    Cutout Standard扣图软件「建议收藏」CutoutStandard是款功能强大且专业的抠图工具。内置强大的功能,可以从相片背景中将您需要的对象抠出和制作蒙太奇图片,且提供Photoshop的抠图插件,非常方便实用。感兴趣的朋友快来下载使用吧。软件功能  【更改背景】CutoutStandard最新版允许您将新剪切的对象与您选择的另一个图像组合在一起。例如,您可以将剪切对象放在“其他位置”。  【模糊背景】选择此功能时,程序切换到模糊模式。您可以将图像的背景模糊到不同程度。此外,背景将被保留,并且唯一的组件会受到模糊效果的影响。这

    2022年9月24日
    2
  • SAE J1939 – 简短介绍[通俗易懂]

    SAE J1939 – 简短介绍[通俗易懂]SAEJ1939–简短介绍在商用车辆领域,标准化的,串行的协议用于单个电子控制单元(ECU)和传动系统组件之间的通讯已有一段时间。通过使用标准化的串行协议,可具有以下优势:组件制造商只需要采用一个协议;这主要是商用车辆才会涉及的问题,因为生产量低。商用车辆制造商可依靠不同供应商的组件。可确保组件之间的互操作性,来自不同制造商的组件不用调整就可一同工作。由国际汽车工程师协会…

    2022年5月1日
    55
  • Webstorm激活码 2021【2021.7最新】

    (Webstorm激活码 2021)最近有小伙伴私信我,问我这边有没有免费的intellijIdea的激活码,然后我将全栈君台教程分享给他了。激活成功之后他一直表示感谢,哈哈~IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.html…

    2022年3月21日
    48
  • ANSYS ICEM CFD 网格划分步骤简要总结[通俗易懂]

    ANSYS ICEM CFD 网格划分步骤简要总结[通俗易懂]

    2022年5月9日
    39
  • 0元搭建卡盟主站_万能卡盟

    0元搭建卡盟主站_万能卡盟删除对象功能说明删除指定桶中的对象。方法定义1.ObsClient->deleteObject(array$parameter)1.ObsClient->deleteObject(array$parameter,callable$callback)请求参数删除桶功能说明删除桶,待删除的桶必须为空(不包含对象、历史版本对象或分段上传碎片)。方法定义1.Ob…

    2022年8月12日
    5

发表回复

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

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