最大最小公倍數

2021-10-08 04:33:59 字數 1337 閱讀 1323

題目

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

輸入格式

輸入乙個正整數n

輸出格式

輸出乙個整數,表示你求得的最小公倍數

樣例輸入

樣例輸出

504注釋 504 = 9 * 8 * 7

資料規模與約定

1 <= n <= 106

分析

題目要求涉及貪心演算法,對於個人而言,更像是乙個純數學問題:

題目主要分析:

主要找三個數,這三個數主要考慮第一位與第三位之間的公約數問題

n分為奇數和偶數討論

奇數下 所求 = n * (n-1) * (n-2) n 和 n-2 之間 相差2 ,除1之外無公約數,所求最大最小公倍數即為三者相乘。

偶數下分兩種情況 由於 (n肯定大於3)n 和 n -2 之間必然存在公約數2,使得 n、n-1、n-2之間必然不能直接相乘得到所求,考慮n-3、n-5 ,當考慮到n-5的時候不得不考慮(n-1) * (n-2) * (n-3) ,由上述3可知該數同樣滿足要求,列項可知(n-1) * (n-2) * (n-3)同時大於 n * (n-1) * (n-5) 於是n-5 被排除,那麼此時只需要考慮 奇數下(n-1) * (n-2) * (n-3) 和 n * (n-1) * (n-3),後者正常情況下是大於前者的,但是問題出在n 和 n-3 是否存在3 這個公約數,如果存在,那麼最大最小公約數為 (n-1) * (n-2) * (n-3)取得,反之為 n * (n-1) * (n-3)取得。

最終**如下:

#include

using

namespace std;

intmain()

else

else

}return0;

}

編譯環境可能不一樣,對於本次資料精度問題,按照要求,最大應該為:

也就是說:1e18足夠了

樓主用的g++環境下 unsigned long型資料佔8位64個bit寬度足夠。

但是為了安全,在評測時建議使用long long 型變數儲存。

最大最小公倍數

時間限制 1 sec 記憶體限制 128 mb 提交 125 解決 4 提交 狀態 討論版 題目描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入 每個測試點 輸入檔案 存在多組測試資料。每個測試點的第一行為乙個整數task,表示測試資料的組數。在一組測試資料中 ...

最大最小公倍數

問題描述 已知乙個正整數n,問從1 n中任選出三個數,他們的最小公倍數最大可以為多少。輸入格式 輸入乙個正整數n。輸出格式 輸出乙個整數,表示你找到的最小公倍數。樣例輸入 9樣例輸出 504資料規模與約定 1 n 106。include include include using namespace...

最大最小公倍數

思路 首先看兩個定理 1 兩個互質數的最小公倍數是他們的乘積 2 相鄰的兩個數互質。那麼如果想讓這兩個數的最小公倍數盡可能大,就找互質的就可以了,三個數也是同樣。互質數越大,最小公倍數也就越大,於是我們從大的數開始找互質的三個數。1.如果n 是奇數,那麼n,n 1,n 2 就互質。2.如果n是偶數,...