問題描述
已知乙個正整數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是奇數,那麼...