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

2021-09-28 23:26:00 字數 1023 閱讀 2261

問題描述

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

輸入格式

輸入乙個正整數n。

輸出格式

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

樣例輸入

樣例輸出

資料規模與約定

1 <= n <= 106。

參考:  這位大佬 寫的 我這裡就寫我自己的感受了  同志們 直接看大佬分析就好了很細 

分析:我演算法很差 貪心更不用說 第中第  題中求序列中隨機三個數的最大公倍數  我們知道   兩個數的最大公倍數是由 兩個數的乘積除與兩個數 最小公約數 得到的 所以 公約數越小 原數(就是求公倍數的那兩個數 我這裡稱為原數) 越大 最終求得的公倍數就越大   並且這裡求的是三個數 不是兩個 情況更加複雜    

利用的是兩個原理 :  互質最小公倍數最大    相鄰自然數互質

當n為奇數時 構成 奇 偶 奇  由於存在兩個奇數 所以不會存在公因子2 由於差小於3 所以更不存在公因子為 3  為4 大於3的情況 所以最大公倍數為n*(n-1)*(n-2)

當n為偶數時  構成 偶 奇 偶  這時由於 存在兩個偶所以 公因子含有2(原因:三個數求最大公倍數 可以看作先由兩個數求最大公倍數 然後把求得的最大公倍數在與第三個數公倍  所以如果兩個偶數先求最大公倍數那麼 必然會產生乙個比2大於等於的最大公約數 結合最大公倍數的求法 原因顯而易見了) 所以不行  換掉最小的 把(n-2)換位(n-3) 但此時 n-(n-3) ==3  相差為3  那麼 n與(n-3) 之間就可能存在 公因子為3 的情況 著也是不行的 所以此時 要麼 再把(n-3)換位(n-5) 要麼就把n換下 然後構成 (n-1) (n-2) (n-3)

根據貪心演算法 顯然用後者 

自己還是第中第呀

#include#include #include using namespace std;

int main()

else if(n%2)

else

return 0;

}

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

時間限制 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是奇數,那麼...