最大最小公倍数

锦囊1

使用贪心来选择。

锦囊2

n为奇数时,答案一定是n*(n-1)*(n-2)

n为偶数时,答案可能是(n-1)*(n-2)*(n-3),也可能是n*a*b,其中a>=n-3

锦囊3

问题描述

已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。

输入格式

输入一个正整数N

输出格式

输出一个整数,表示你找到的最小公倍数。

样例输入

9

样例输出

504

数据规模与约定

1 <= N <= 106


#include<iostream>
using namespace std;

int main()
{
	long long n;
	cin>>n;
	long long sum;
	if(n<=2)
	{
		cout<<"2";
	}
	else
	{
		if(n%2==1)
		{
			sum=n*(n-1)*(n-2);
		 } 
		 else
	 	{
	 		if(n%3==0)
	 		{
	 			sum=(n-1)*(n-2)*(n-3);
			 }
			 else
			 {
			 	sum=n*(n-1)*(n-3);
			 }
	 	}
	 	cout<<sum; 
	}
	return 0;
 }

思路:求三个数的最大最小公倍数

第一个条件是“最大”。第二个条件是“最小”。我们都知道,两个数的最小公倍数就是两个数相乘(如果互质的话),那么三个数也同样如此,只要我们找到最大的三个互质的数就可以求出“最大”的“最小”公倍数。听起来有点绕,看分析:

1,2,3,4,5,6(n=6)

1,2,3,4,5,6,7(n=7)

1,2,3,4,5,6,7,8(n=8)

如上:n为奇数时,比如7,我要找出最大的最小公倍数,就要找出最大的三个互质的数,就是7,6,5,也就是n*(n-1)(n-2)

n为偶数时,比如6。如果还按照上面的原则,就是6*5*4,显然是不行的,因为6,4有公约数,那如果6,5,3呢?显然也不行,跨度为3,如果一开始n就是3的倍数,那么这个也不行,所以我们可以看看5,4,3,很显然,满足最大的三个互质的数,也就是(n-1)*(n-2)*(n-3)

上面那个因为n%3==0,但是还有一种不等于0的情况,如n=8.三个最大的数是8,7,6,然而并不行,8,7,5是最大的,也就是 n*(n-1)*(n-3)

除了上面几种情况,还有用户输入的数小于等于2的情况,都输出2.

另外,注意数的类型用long long,尽可能使用大一点的类型,因为数值过大会溢出导致结果出错


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值