蓝桥杯 最大最小公倍数

最大的最小公倍数
Time Limit: 1000 MSMemory Limit: 32768 K
Total Submit: 265(71 users)Total Accepted: 63(51 users)Rating: Special Judge: No
Description

从小学我们就学过最小公倍数,今天这个问题也是关于最小公倍数lcm (lease common multiple)的。我们的问题是,给定一个整数n后,你需要任取三个不大于n的数,取法不限,每个数可取多个,使得取到的这三个数的最小公倍数在所有取法中是最大的。

举个例子:给定的n是5。那么不大于5的可选数为1、2、3、4、5。这里选出3、4、5三个数的最小公倍数是60,在所有取法中是最大的。因此我们得到结果60。

Input

输入包含多组测试数据,每组为一个整数n (1 <= n <= 10^6) 如上所述。

Output

对每组测试数据,输出一个整数,代表所有可能取法中,选出的不超过n的三个数的最小公倍数的最大值。允许选取相同的数多次。

Sample Input

5

7

Sample Output

60

210

Hint

输出结果可能会超出32位整数所能存放的范围,你可能需要64位整型变量存储答案。

Author
ZeroPointer@HRBUST
思路:有点贪心的味道, 首先要知道无论n为何值,n-3~n这四个数必定存在三个数互质

而且这四个数的公约数最大为3,因为n与n-3差3。若n为奇数时n,n-1,n-2必然互质, 因为n-2~n差2,且n与n-2都是奇数。若n为偶数那么三个数必然是两奇一偶(不会被二整除),而且两个奇数要不能被三整除。

#include <stdio.h>

int main()
{
	long long n;
	while(scanf("%lld", &n) != EOF)
	{
		if(n <= 2)
		{
			printf("%lld\n", n);   //注意n<=2的情况
		}
		else
		{
			if(n % 2 == 0)              
			{
				if(n % 3 == 0) //当n能被3整除时n-1不能,且n-3也不能,所以n-1,n-2,n-3互质
				{
					printf("%lld\n", (n-1)*(n-2)*(n-3));
				}
				else          //当n不能被3整除时,选两奇一偶n,n-1,n-3,
				{
					printf("%lld\n", n*(n-1)*(n-3));
				}
			}
			else            //当n为奇数时,n,n-1,n-2必定互质 
			{
				printf("%lld\n", n*(n-1)*(n-2));
			}
		}
	}
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值