問題描述
已知一個正整數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,以免越界