問題描述:
已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以是多少。
輸入格式:
輸入正整數N。
輸出格式:
輸出一個整數,表示你找到的最小公倍數。
範例輸入:
9
範例輸出:
#504
資料規模與約定:
1 <= N <= 106
線上學習影片教學推薦:java課程
想法:
#首先聲明幾個概念:
兩個非0相鄰自然數的最小公倍數是它們的乘積;相鄰兩個奇數的最小公倍數是它們的乘積;相鄰兩個偶數(0除外)的最小公倍數是它們乘積的一半。
現在上升到三個數的最小公倍數,要依照N的奇偶性分兩種情況:
一、當n為奇數:n、n-1、n-2的乘積
二、當n為偶數:n-1、n-2、n-3是一組極大解,若答案大於目前值,只能是大於這3個數的乘積,那就只能把其中一個數變成n,三個數也要兩兩互質。 n、n-2、n-3偶偶奇明顯不互質;n、n-1、n-3偶奇奇;n、n-1、n-2偶奇偶明顯不互質。
那麼答案只能是n-1、n-2、n-3或是n、n-1、n-3。但n、n-3雖然是一個奇數,一個偶數,但是它們不連續可能不互質例如5,6,3三個數。
n為奇數:n、n-1、n-2
n為偶數: n是3的倍數n-1、n-2、n-3
n不是3的倍數n、n-1、n-3
範例如下:
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner input=new Scanner(System.in); long N=input.nextLong(); long temp=0; if(N<=2){ System.out.println(N); } else if(N%2==0){ temp=(N-1)*(N-2)*(N-3); if(N%3!=0){ temp=Math.max(temp,N*(N-1)*(N-3)); } System.out.println(temp); } else { System.out.println(N*(N-1)*(N-2)); } } }
技巧:考慮N<3的情況,而且這題注意用long。
推薦java相關文章教學:java開發入門
#以上是java中如何計算最小公倍數的詳細內容。更多資訊請關注PHP中文網其他相關文章!