整數的因子分解法

2021-09-18 06:01:04 字數 1902 閱讀 4285

由算術基本定理,我們知道每乙個正整數都可以被唯一地寫成一些素數的乘積。

由初等數論及其應用定理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...