Contents
Problem
給你某集合的最小公倍數,要你算出這個集合各元素相加的值,取總和最小的,集合內 至少 兩個元素。
Solution
用篩法建出質數表 prime[ ]
後,來做質因數分解:
- $n$ 是 質數
答案為 $1+n$ - $n$ 是 合成數
質因數分解後互質的各項相加,因為: $$\begin{aligned} &lcm(a,b) = {a \times b\over gcd(a,b)}\\\\ &gcd(a,b) = 1\\\\ &lcm(a,b) = a \times b \end{aligned}$$ 如果 $a$ 和 $b$ 都大於$1$的話,$a \times b > a + b$ ,所以相加比都乘在一起小。
$INT\_MAX = 2^{31}-1$
只需要找 $sqrt(INT\_MAX)$ (以下簡稱 $sqrt$ ) 以內的質數,原因是:
- 小於 $sqrt$ 的自然在
prime[ ]
會處理到 - 大於等於 $sqrt$
- 是質數,答案為 $1+n$
- 是合成數,必定有小於 $sqrt$ 的質因數,除掉後,剩餘的即是大於 $sqrt$ 的質因數。
如果剩餘的為合成數,代表它可以被質因數分解,裡面的各項質數會大於 $sqrt$ ,而此合成數必定大於$sqrt \times sqrt$ ,這樣就超出題目給定的範圍了。
$2^{31}-1 = 2147483647$ 為質數,加 $1$ 後會有 overflow 的問題,獨立出來處理。
$1$ 不是質數或合成數。
Code
1 |
|