藍橋杯最大最小公倍數

問題描述

已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以爲多少。

輸入格式

輸入一個正整數N。

輸出格式
輸出一個整數,表示你找到的最小公倍數。
樣例輸入
9
樣例輸出
504
數據規模與約定

1 <= N <= 106


思路:當n爲奇數時,n與n-2必互質,故答案應爲n*(n-1)*(n-2)

  當n爲偶數時,情況就變得稍微複雜一些了

貪心算法的思想是整體最優解可以通過一系列局部最優解來得到,故可以分情況討論

如果是偶數的話,分兩種情況:

(1)如果 n 是偶數且不是三的倍數, 比如8,那麼跳過n-2這個數而選擇 8 7 5 能保證不會最小公倍數被除以2。所以最小公倍數的最大值爲n * (n – 1) * (n – 3)

(2)如果 n 是偶數且爲三的倍數,比如6,如果還像上面那樣選擇的話,6和3相差3會被約去一個3,又不能構成最大值了。那麼最小公倍數的最大值爲(n – 1) * (n – 2) * (n – 3)
#include<iostream>
using namespace std;
int main()
{
	long long int n;
	while(cin>>n)
	{
		if(n<=2)
		{
			cout<<n<<endl;
		}
		else if(n%2==1)
		{
			cout<<n*(n-1)*(n-2)<<endl;
		}
		else if(n%3==0)
		{
			cout<<(n-1)*(n-2)*(n-3);
		}
		else
		{
			cout<<n*(n-1)*(n-3)<<endl;
		}
	}
	return 0;
}



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章