最大公约数 与 最小公倍数

目录

题目(后文为方便读者阅读 将补充题目项目)

基础知识补充:

思路:

辗转相除的实现

最终代码:


题目(后文为方便读者阅读 将补充题目项目)

 

基础知识补充:

如果int 类型溢出的话 建议更换long long类型 可用范围更大。long long需要%lld这种格式字符

最大公约数*最大公倍数 = m*n(原来的两个数)

思路:

方法一:首先判断二者之间的较小值是否为最大公约数 如果不是逐步减小 直到找出最大公约数 并算出最大公倍数 求和 (复杂度过大)//不推荐 但下文也有源代码

方法二: 

辗转相除求出最大公约数 继而求出最大公倍数 求和

辗转相除的实现

1.创建一个变量 c 接收 m 和 n 的余数 (n 作为最大公约数)

2.将 m 的值 赋给 n ; 将 n 的值 赋给c (即使出现m 小于 n 的情况 也会在一次循环之后实现交换)

3.有使循环结束的条件  -  找到最大公约数  -- 余数为0

 

最终代码:

方法一:

#include<stdio.h>
int main()
{
	int n = 0;
	int m = 0;
	scanf("%d %d", &m, &n);
	int max = (n > m ? m: n);//假设最大公约数是二者的较小值
	while (1)
	{
		if (n % max == 0 && m % max == 0)
		{
			break;
		}
		max--;
	}
	int min = (n > m ? n : m);//假设最小公倍数是n和m的较大值
	while (1)
	{
		if (n % max == 0 && m % max == 0)
		{
			break;
		}
		min++;
	}
	return 0;
}

方法二:

#include<stdio.h>
int main()
{
	long long m = 0;
	long long n = 0;
	scanf("%lld %lld", &m, &n);
	long long c = 0;
	long long ret1 = m;//留存最原始的m n 
	long long ret2 = n;
	while (c = m % n)
	{
		m = n;
		n = c;
	}
	long long y = n;
	long long b = ret1 * ret2 / y;
	printf("%lld", y+b);
	return 0;
}

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值