C語言藍橋杯算法訓練--最大的最小公倍數

 

問題描述

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

輸入格式

輸入一個正整數N。

輸出格式

輸出一個整數,表示你找到的最小公倍數。

樣例輸入

9

樣例輸出

504

數據規模與約定

1 <= N <= 106。

 

本人菜鳥一枚,第二題繼續被虐,此題用暴力貌似不行,貪心不會想,此題參考別人代碼完成。

數學知識:如果三個數互爲質數,那麼這三個數的乘積便爲它們的最小公倍數

               連續的兩個奇數必互質!!!

因爲本題目中要求最小公倍數的最大值,那麼可以直接從N向前看,找三個連續的互爲質數的數,那麼它們的乘積便是1~N最小公倍數的最大值。 
有以下二種情況。 

(1)、當N爲奇數時,那麼N,N-1,N-2互爲質數,很明顯N*N-1*N-2是1~N最小公倍數的最大值。 
(2)、當N爲偶數時,且能被3整除時,N-1,N-2,N-3互質,此時N-1*N-2*N-3是1~N最小公倍數的最大值;當N爲偶數時,但不能被3整除時,N,N-1,N-3互質,此時N*N-1*N-3是1~N最小公倍數的最大值

#include<stdio.h>
int main()
{
	long long i,j,ans,n;
	scanf("%lld",&n);
	if(n%2!=0)
		ans=n*(n-1)*(n-2);
	else
		if(n%3==0)
			ans=(n-1)*(n-2)*(n-3);
		else
			ans=n*(n-1)*(n-3);
	printf("%lld\n",ans);
	return 0;
}

 

總結:

1、此題一定要用貪心來做,想不出貪心追根到底是數學不好,有關質數、最小公倍數、最大公約數的概念不熟!!

2、藍橋上的題涉及整數,還是用long long代替int,以免越界

 

 

 

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