最大最小公倍數 ( 演算法訓練 )
阿新 • • 發佈:2019-02-19
時間限制:1.0s 記憶體限制:256.0MB
問題描述
已知一個正整數N,問從1~N中任選出三個數,他們的最小公倍數最大可以為多少。
輸入格式
輸入一個正整數N。
輸出格式
輸出一個整數,表示你找到的最小公倍數。
樣例輸入
9
樣例輸出
504
資料規模與約定
1 <= N <= 106。
/*找最大的三個兩兩互質的數,大於1的兩個相鄰的自然數必定互質, 如果n是奇數,那麼 n、n-1、n-2必定兩兩互質,首先 這三個數都不可能同時2整除, 假設剩下的n,n-2中有一個數能被3整除,那麼有公因子的數一定是n或n-2加減3才能得到的情況。 為此,n,n-1,n-2的乘積不僅是最大的,而且一定兩兩互質。 如果n是偶數,繼續分析n*(n-1)*(n-2),這樣的話n和n-2必定有公因子2, 那麼就換成式子n*(n-1)*(n-3)。然後仔細思考一下, 若偶數本身就能被3整除的話,n和n-3就有公因子3,這個式子也不成立了, 所以式子就變成了(n-1)*(n-2)*(n-3),這時候可以把n-1看成n,這樣就是上面說的n是奇數的情況了。 */ #include <stdio.h> int main (void) { __int64 n, num; while(scanf("%I64d", &n) != EOF) { if(n < 3) { printf("%I64d\n", n); } else if(n % 2 != 0) { printf("%I64d\n", n * (n - 1) * (n - 2)); } else { if(n % 3 != 0) printf("%I64d\n", n * (n - 1) * (n - 3)); else printf("%I64d\n", (n - 1) * (n - 2) * (n - 3)); } } return 0; }