蓝桥杯-最大的最小公倍数 (数学知识、贪心)

最大的最小公倍数
在这里插入图片描述
在这里插入图片描述

求三个数的最小公倍数可以类比两个数的最小公倍数
当两个数互质时,最小公倍数即是两数乘积
因此 当三个数互质时,最小公倍数即是三数乘积
假设一个正整数N,由贪心策略,首先判断最大的三个数N,N-1,N-2
当N为奇数时,N与N-2均为奇数,两个相邻奇数互质,同时由数学知识可知,两个相邻整数互质,因此N,N-1,N-2三个数互质,最大的最小公倍数为NN-1N-2
当N为偶数时,N与N-2存在公因数2,因此使用N-3对其中一个数进行替换,由于贪心策略,因此,对最小的N-2进行替换,此时判断N,N-1,N-3是否互质。N-1,N-3为相邻奇数,因此互质,N,N-1为相邻正整数因此互质,所以关键在于N与N-3是否互质:

  • 当N与N-3存在公因数3时,N与N-3不互质,使用贪心策略将N用N-2替换,即转换成为N为奇数的情况,此时最大的最小公倍数为N-1N-2N-3;
  • 当N与N-3不存在公因数3时,N与N-3互质,因此此时最大的最小公倍数为NN-1N-3

在这里插入图片描述
注意数据大小,两个10e6的数相乘可能超int

#include<iostream>
using namespace std;
typedef long long LL;
LL n;

LL MaxLcm(LL n)
{
	if(n<=2) return n;
	else if(n%2==0) 
	{
		if(n%3==0) return (n-1)*(n-2)*(n-3);
		else return n*(n-1)*(n-3) ;
	}
	else
		return n*(n-1)*(n-2);
}

int main()
{
	while(scanf("%lld",&n)!=EOF)
	{
		LL ans =MaxLcm(n);
		printf("%lld\n",ans);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值