最大的最小公倍数

描述

  高中时我们对最小公倍数就已经很熟悉了,相信你很快就可以把这个问题解决。这次的问题是:给你一个正整数n,任取三个不大于n的正整数,取法不限,每个数可取多次,使得取到的这三个数的最小公倍数在所有取法中是最大的。

  例如当n = 5 时,不大于5的数为1、2、3、4、5。则应该选3、4、5三个数,它们的最小公倍数是60,在所有取法中是最大的。因此我们得到结果60。

  是不是很简单?抓紧时间 AC 吧。

输入

  输入包含多组测试数据。每组数据为一个正整数n(1≤n≤10^6)。

输出

  对每组测试数据,输出一个整数,代表所有可能取法中,选出的三个数的最小公倍数的最大值。

样例输入

5
7

样例输出

60
210

来源

蓝桥杯

题意分析:在n个数中找任意三个数的最小公倍数,并且求得最大的最小公倍数(重点在于最大)。

思路分析:最大 最小公倍数,联想到两个数的求最大最小公倍数,即两个数的乘积(注:连续的两
个自然数是互斥的)。

同样,我们可以拿最后三个数来做考虑。

  1.当n为奇数时,n,n-1,n-2为奇偶奇,里面只有一个偶数,所以不会有2这个因子。这三个数相差不
到3,所以也不会有因子3,故符合题意。

  2.当n为偶数时,n,n-1,n-2为偶奇偶,此时n,n-2肯定含有因子2,所以除于2不值得。所以考虑将
n-2 换成n-3,变成奇偶奇,此时也有一个问题n和n-3,如果n%3==0,则除于3更不值得。仍根据奇偶奇
的原则,变动偶数n为n-2,此时换成n-1,n-2,n-3和1情况一样。故此时符合题意。
#include<stdio.h>
typedef long long ll;
int main()
{
	ll n,ans;
	while(scanf("%lld",&n)!=EOF)
	{
		if (n<=2)
			ans = n;
		else if (n%2)
			ans =  n * (n-1) * (n-2);
		else
		{
			if (n%3)
				ans = n * (n-1) * (n-3);
			else
				ans = (n-1) * (n-2) * (n-3);
		}
		printf("%lld\n",ans);
	}
	return 0;
} 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值