由算術基本定理,我們知道每乙個正整數都可以被唯一地寫成一些素數的乘積。
由初等數論及其應用定理3.2可知:
任意給定乙個整數n,則n要麼是乙個素數,要麼擁有乙個不超過n
\sqrt
n的素因子。因此,當我們依次用不超過n
\sqrt
n的素數2,3,5…去除n的時候,要麼,我們可以找到乙個n的素因子p
1p_1
p1,要麼我們將得出結論說n是乙個素數。
如果我們找到了乙個n的素因子,我們將尋找n1=
np1
n_1 = \frac
n1=p1
n
的素因子。但是這一次,我們是從p1
p_1
p1
開始(包含p1
p_1
p1
)尋找。因為n1
n_1
n1
不會存在小於p1
p_1
p1
的素因子了。我們繼續判斷是否存在不超過n1
\sqrt
n1
的素因子能夠整除n1
n_1
n1
. 我們持續這樣迭代下去,直到最終能夠得到n的素因子分解。
17世紀,費馬提出了乙個分解方法,核心思想是:將乙個合數分解成兩個平方的差。
這個方法不是很高效
如果n是乙個正的奇數,那麼n可以可以唯一地分解成兩個正整數的積,並且可以表示成兩個平凡書的差,一一對應。即:
如果n是乙個正的奇數,那麼n = ab =s
2s^2
s2-t
2t^2
t2, 其中s=a
+b
2s = \frac
s=2a+b
, t=a
−b
2t = \frac
t=2a−b
,都是整數。因為a,b都是奇數。
如何應用費馬定理呢?
現在假設我們要分解乙個正的奇數n, 我們要得到a,b,其實只需要得到x,yt即可。
因為n =x
2−y2
n = x^2-y^2
n=x2−y
2,所以y2=
x2−n
y^2 = x^2-n
y2=x2−
n,所以我們就通過尋找形如x2−
nx^2-n
x2−n
的完全平方數即可。
因此,為了求n的分解,我們在整數序列
t 2−
n,(t
+1)2
−n,(
t+2)
2−n,
…t^2-n,(t+1)^2-n,(t+2)^2-n,…
t2−n,(
t+1)
2−n,
(t+2
)2−n
,…中尋找完全平方數。其中t是大於n
\sqrt
n的最小整數。
那麼找到什麼時候是個頭呢?
因為n =n
×1
n = n \times 1
n=n×1
,所以n=(
n+12
)2−(
n−12
)2
n = (\frac )^2 - (\frac )^2
n=(2n+
1)2
−(2n
−1)
2所以t的最大取值為n+1
2
\frac
2n+1
,至於是否包含,暫不研究。
例3.23
pollard的兩種方法都太慢了,除非是被分解的數具有一些特殊的性質。暫不研究。
整數因子分解
時間限制 1000ms 記憶體限制 1000k 提交次數 0 通過次數 0 題型 程式設計題 語言 g gcc vc 大於1的正整數 n 都可以分解為 n x1 x2 xm,每個xi為大於1的因子,即1 第一行乙個正整數n 1 n 1000000 不同的分解式數目 12 8 此題因子講順序的.第乙個...
整數因子分解
大於1的正整數 n 都可以分解為 n x1 x2 xm,每個xi為大於1的因子,即1例如 當n 12時,共有8種不同的分解式 12 12 12 62 12 43 12 34 12 322 12 26 12 232 12 223 對於給定正整數n,計算n共有多少種不同的分解式。此題因子講順序的.第乙個...
整數因子分解
大於1的正整數n可以分解為 n x1 x2 xm.例如,當n 12時,共有8種不同的分解式 12 12 12 6 2 12 4 3 12 3 4 12 3 2 2 12 2 6 12 2 3 2 12 2 2 3 對於給定的正整數n,程式設計計算n共有多少種不同的分解式。輸入資料有多行,給出正整數n...