題目
已知乙個正整數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是偶數,...