费马的分解使用极大的整数

时间:2017-04-24 09:38:31

标签: python factorization

我正在尝试为非常大的整数实现Fermat的因子分解,而我似乎无法使其工作。

我的代码如下

def isqrt(n):
    x = n
    y = (x + n // x) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x

def FermatsFactorization(N):
    a = math.ceil(isqrt(N))
    b2 = ((a*a) - N)
    while not isqrt(b2).is_integer():
        a += 1
        b2 = ((a*a) - N)
    p = a + isqrt(b2)
    q = a - isqrt(b2)
    print p
    print q
    return p,q

所以这段代码可以用于简单的整数,例如5959,但我想考虑下面的

N = 21782178510063776461241988741393403748263149606418470290457970869584937331514019374606465366303005016660193541806517181777318162895347539817622285020192774759478269128757372541938236369238616095442740118695407004519767912490482867488611536705877428644997287974943888081383661776269804618969459352629702475787077033241358667142820088780464925538022629953746785180882881018116846435825219064338036769722076725591665293793855682103585288579694301648980485573448067751223659912804906632104733676877199934241937423870885559163031690669390029458536950673319993077233987061166029740639193164051093517111904059841571819466949

当我尝试运行代码时出现错误

 line 108, in FermatsFactorization
   b2 = ((a*a) - N)
OverflowError: long int too large to convert to float

有没有人知道这方面的方法,或者是否有一些技巧来实现这么大的分解?

0 个答案:

没有答案