求最小公倍數(擴充套件版)

2021-08-15 13:40:28 字數 1161 閱讀 1616

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

多組輸入,每組輸入乙個正整數n。(1<=n<=10^5)

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

這個題的意思就是要我們在1~n的範圍內找三個數,使他們的最小公倍數在這個範圍內的組合是最大的。那麼,如果我們找三個兩兩互質的數,這樣只需要相乘即可,就沒有需要約分的地方。

接下來先說乙個結論:大於1的兩個相鄰的自然數必定互質。

而對於1~n的範圍,肯定是 n*(n-1)*(n-2)的乘積最大、如果這三個數還兩兩互質的話那就最棒了。

如果n是奇數,那麼 n、n-1、n-2必定兩兩互質,要是有些糾結的話,那麼我們就分析在什麼情況下可能會存在公因子。n是奇數,那麼n,n-1,n-2一定是兩奇加一偶的情況。公因子2直接pass,因為只有乙個偶數。假設剩下的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-1)*(n-3)也不成立了,n和n-3就有公因子3,再仔細思考一下,式子就變成了(n-1)*(n-2)*(n-3),兩奇夾一偶的情況。

**如下:

#includeint main()

else

else

printf("%lld\n",n*(n-1)*(n-3));}}

return 0;

}

求兩個數的最小公倍數

#includeint main()

printf("%d\n",p/a);

}else

printf("%d\n",p/b);}}

return 0;

}

求三個數的最小公倍數

方法一:

#includeint main()

if(a>c)

if(b>c)

for(i=a;;i++)}}

return 0;

}

但是該方法比較耗時,做題時可能會超時。其他方法後續補充。

最小公倍數

最大公倍數最大是兩個數的乘積,兩個數互質 最大公約數是1 幾個數共有的倍數叫做這幾個數的公倍數,其中除0以外最小的乙個公倍數,叫做這幾個數的最小公倍數。記作 a,b 與最小公倍數相對應的概念是最大公約數,a,b的最大公約數記為 a,b 關於最小公倍數與最大公約數,我們有這樣的定理 a,b a,b a...

最小公倍數

問題描述 編寫一函式lcm,求解兩個正整數的最小公倍數。樣例輸入 乙個滿足題目要求的輸入樣例。例 3 5 樣例輸出 與上面樣例對應的輸出。例 15 資料規模和約定 輸入資料中每乙個數的範圍 例 兩個數都小於65536.演算法分析 一般來說,求兩個正整數a b的最小公倍數的演算法思路很簡單,主要分為以...

最小公倍數

求n個數的最小公倍數。輸入 輸入包含多個測試例項,每個測試例項的開始是乙個正整數n 2 n 10 然後是n個正整數。輸出為每組測試資料輸出它們的最小公倍數,每個測試例項的輸出佔一行。你可以假設最後的輸出是乙個32位的整數。樣例輸入 2 4 6 3 2 5 7 樣例輸出 1270 題目 zjgsuto...