前往
大廳
主題

LeetCode - 1808. Maximize Number of Nice Divisors 解題心得

Not In My Back Yard | 2024-02-12 21:30:00 | 巴幣 0 | 人氣 46

題目連結:


題目意譯:
你被給定一正整數 primeFactors。你被要求去建構出一個正整數 n 其滿足以下條件:
    n 的質因數(不一定彼此相異)之數量最多為 primeFactors 個、
    n 的好因數之數量最大化。注意到 n 個某個因數如果可以被 n 的所有質因數整除,則其為好因數。例如說,如果 n = 12,則其質因數有 [2,2,3]。6 和 12 會是好因數,而 3 和 4 則不是。

回傳 n 的好因數之數量。由於該數字可能會太大,將其模 10 ^ 9 + 7 後再回傳。

注意到一個質數為大於 1 的自然數,其不為任兩個更小的自然數之乘積。 n 的質因數為一個質因數列表使得其元素乘積等於 n。

限制:
1 ≦ primeFactors ≦ 10 ^ 9



範例測資:
範例 1:
輸入: primeFactors = 5
輸出: 6
解釋: 200 是 n 的一個合法的數值。
其有著 5 的質因數:[2,2,2,5,5],而其有著 6 個好因數:[10,20,40,50,100,200]。
不存在其他數字使得 n 有最多 5 個質因數並有著更多的好因數。

範例 2:
輸入: primeFactors = 8
輸出: 18


解題思維:
可以看到每一種好因數之個數可以對應到 primeFactors 的一個整數拆分。

例如說範例 1 的 primeFactors = 5 被拆成了 3 + 2,其乘積為 3 × 2 = 6。

為何是乘積?因為如果某一種質因數 P 有 C 個。而根據定義,好因數「必須」被 P 整除。因此其質因數分解後的結果可以是 P ^ 1 、 P ^ 2 、 …… 、 P ^ C,總計 C 種。而其他種類的質因數也是同理。因此總計個數為所有種類質因數各自之個數之乘積。

所以我們把問題變成了——將 primeFactors 進行整數分拆,並使得分拆後的整數之乘積最大化。而這其實就是這題的內容,所以直接照著使用即可。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作