2021 3 9 演算法訓練 最大最小公倍數

2021-10-21 20:05:33 字數 1134 閱讀 6948

【練習名稱】2021/3/9

【練習名稱】演算法訓練 最大最小公倍數

資源限制

時間限制:1.0s 記憶體限制:256.0mb

問題描述

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

輸入格式

輸入乙個正整數n。

輸出格式

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

樣例輸入

9樣例輸出

504資料規模與約定

1 <= n <= 106。

【思路分析】

這個題的意思就是要我們在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),兩奇夾一偶的情況。

#include

#include

using

namespace std;

intmain()

else

if(n%2)

else

if(n%3)

else cout<<

(n-1)*

(n-2)*

(n-3);

return0;

}

最大最小公倍數 演算法訓練

時間限制 1.0s 記憶體限制 256.0mb 問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。找最大的三個兩兩互質的數,大於...

演算法訓練 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9 樣例輸出 504資料規模與約定 1 n 106。很水的一道題,想通如果是偶數的情況就搞定了,另外要注意下資料很大,需要lon...

演算法訓練 最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。問題描述 最直接的想法就是找三個最大的互質數,這裡有個關係就是若n是奇數,那麼...