1. 程式人生 > >51 Nod 1419 最小公倍數挑戰

51 Nod 1419 最小公倍數挑戰

數據 數字 click div blog logs ref .html ext

1419 最小公倍數挑戰

幾天以前,我學習了最小公倍數。玩得挺久了,想換換口味。

我不想用太多的數字,我想從1到n中選三個數字(可以相同)。使得他們的最小公倍數最大。

Input
單組測試數據。
第一行有一個整數n (1≤n≤1,000,000)。
Output
輸出一個整數表示選三個數字的最大的最小公倍數。
Input示例
9
7
Output示例
504
210

思路:任意的兩個相鄰自然數肯定互質 任意兩個相鄰的奇數肯定互質
   當 n 為奇數時 n 和 n-1肯定互質 n-1 和 n-2 肯定互質 n 和 n-2 也互質
   所以 LCM 為 n*(n-1)*(-2)
   當 n 為 偶數時 n 和 n-1 肯定互質 考慮 和 n-3 的關系 如果和 n-3 也互質的話 LCM 就是 n*(n-1)*(n-3)
     如果 和 n-3 不互質 只能 將 n 向後移一位 否則 LCM不是最大 這時候輸出 (n-1)*(n-2)*(n-3)
技術分享
 1 #include <cstdio>
 2 #include <cctype>
 3 
 4 typedef unsigned long long LL;
 5 
 6 LL n;
 7 
 8 int hh() {
9 scanf("%lld",&n); 10 11 if(n<=2) { 12 printf("%lld\n",n); 13 return 0; 14 } 15 16 if(n&1) printf("%lld\n",(LL)n*(n-1)*(n-2)); 17 else { 18 if(n%3==0) printf("%lld\n",(LL)(n-1)*(n-2)*(n-3)); 19 else printf("%lld\n",(LL)n*(n-1
)*(n-3)); 20 } 21 22 return 0; 23 } 24 25 int sb=hh(); 26 int main(int argc,char**argv) {;}
代碼

 

51 Nod 1419 最小公倍數挑戰