C求解最大公约数与最小公倍数

文章介绍了两种计算最大公约数(GCD)和最小公倍数(LCM)的数学方法并提供了C语言实现。一种是分解质因式法,通过找到两个数的公共质因数来确定GCD和LCM;另一种是辗转相除法,通过连续除法直至余数为零找到GCD,然后利用GCD求得LCM。每种方法都包括详细的编码流程和完整的C代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、数学求解最大公约数与最小公倍数的方法—分解质因式法

1.1 原理

最大公约数:两个数共有的约数中最大的一个。
假设两个数A,B。他们的公约数t的范围1<t<=Min(A,B)
最小公倍数:两个数公有的最小倍数。
在这里插入图片描述

一直除下去,直到A和B这两个数,没有共同的除数之后,左边R之间的乘积就是最大公约数,即RR1。
最小公倍数就是R
R1A2B2。

1.2 编码流程

1、我们写一个循环判断程序,循环终止条件是A和B中的最小值。判断A和B的共同约数最大为多少。

printf("please input\n");
	scanf("%d%d",&m,&n);  //输入要求公约数与公倍数的两个数m,n
	if(m<n)
		t=m;         //判断m,n中的最小值,把它赋值给t;
	else
		t=n;
	
for(i=1;i<=t;i++)
	{
		if(m%i||n%i)      //m和n余数只要有一个不为零,就结束这次循环,进入下一次循环
		{
			continue;
		}
		else              //m和n都为零时,更新公约数变量
		{
			r=i;
		}
	}

循环结束之后,r中存放的就是m和n中最大的公约数。
2、求最小公倍数,就是先求出谁乘以最大公约数各自等于m和n,把求出各个数字乘起来,再乘以最大公约数就是最小公倍数。

y=r*(m/r)*(n/r)*r;

1.3 完整代码如下:

#include<stdio.h>
int main()
{
	int m ,n,y,r,i,t;
	printf("please input\n");
	scanf("%d%d",&m,&n);
	if(m<n)
		t=m;
	else
		t=n;
	
	for(i=1;i<=t;i++)
	{
		if(m%i||n%i)
		{
			continue;
		}
		else
		{
			r=i;
		}
	}
	y=r*(m/r)*(n/r)*r;
	printf("max %d\n",r);
	printf("min %d\n",y);
	return 0;
 } 

2、数学求解最大公约数与最小公倍数的方法—辗转相除法

2.1原理

假设求m,n中最大公约数,用m除以n,把它的余数和被除数中最大的赋值给m,小的赋值给n,继续相除,直到最后的余数为零位置,这个时候在除数位置上的数就是最大公约数。
如:求(319,377):
第一步: 377÷319=1(余58)
第二步:319÷58=5(余29)
第三步:58÷29=2(余0)
29就是m和n 的最大公约数。

2.2编程步骤

先记录下m,n的乘积,因为求最小公倍数时,需要用到公式:两个数的乘积等于这两个数的最大公约数与最小公倍数的积。

p=n*m;

然后用辗转相除法求出最大公约数。

if(n<m)
	{
		temp=n;
		n=m;
		m=temp;
	}
	p=n*m;
	while(m!=0)
	{
		r=n%m;
		n=m;
		m=r;
		if(n<m)
		{
			temp=n;
			n=m;
			m=temp;
		}
	}

然后代入公式,求出最小公倍数

p/n

2.3 完整代码

#include<stdio.h>
int main()
{
	int p,r,n,m,temp;
	printf("请输入两个正整数:n,m:");
	scanf("%d%d",&n,&m);
	if(n<m)
	{
		temp=n;
		n=m;
		m=temp;
	}
	p=n*m;
	while(m!=0)
	{
		r=n%m;
		n=m;
		m=r;
		if(n<m)
		{
			temp=n;
			n=m;
			m=temp;
		}
	}
	printf("它们的最大公约数为:%d\n",n);
	printf("他们的最小公倍数为:%d\n",p/n);
	return 0;
 } 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值