1. 程式人生 > >整數分解費馬方法

整數分解費馬方法

寫在前面:

  這篇部落格是我在[◹]對 算術基本定理 的研究 中的一部分

 

  • 整數分解費馬方法

  整數分解費馬方法與費馬小定理無關

  原理:

    任何一個正整數n都能拆成n==2k*a的形式,其中a為一個奇數

    我們在a上搞事情:

      若a==c*d (c>d,且顯然cd都是奇數)

      那麼讓x==(c+d)/2,讓y==(c-d)/2

這裡是邏輯上的證明,並不是計算機要實現的內容,根本不考慮丟精的情況(就算考慮了,cd都是奇數,不會丟精)

      那麼x2-y2==(c2+d2+2c*d)/4-(c2

+d2-2c*d)/4==(4c*d)/4==c*d==a

    列舉x2,看看x2-a是不是完全平方數

    如果是的話,那麼c==x+√(x2-a)d==x-√(x2-a)就都是a的因子

    可以列舉x2,找出a的所有因子!

  有用的性質:

    接著上面的證明,x==(c+d)/2,a==c*d

    根據基本不等式,(c+d)/2 >= √(cd)

    即x2 >= a

    在列舉時不需要判斷差的正負了,一定不是負的

 

程式碼如下:

C++:

 

Java: