OverflowError Python int zu groß für die Konvertierung nach C long

#!/usr/bin/python
import sys,math
n = input("enter a number to find the factors   :   ")
j,flag,b= 0l,False,0l
for b in xrange(1,n+1):
    a = n + (b*b)
    j = long(math.sqrt(a))
    if a == j*j:
        flag = True
        break
if flag:
    c = j+b
    d = j-b
    print "the first factor is   :   ",c ,"  and the second factor is   :   ",d

Wenn ich diesen Code ausführe, werden verschiedene Fehlertypen für verschiedene Eingaben ausgegeben.

Das Folgende ist die eine Art von Eingabe

linux@terminal:~$ ./fermat.py
enter a number to find the factors   :   544564564545456
Traceback (most recent call last):
  File "./fermat.py", line 8, in <module>
    for b in range(1,n+1):
MemoryError

Dies ist für die zweite Eingabe

linux@terminal:~$ ./fermat.py
enter a number to find the factors   :   28888888888888888888888888888888888444444444444444444444444
Traceback (most recent call last):
  File "./fermat.py", line 8, in <module>
    for b in range(1,n+1):
OverflowError: range() result has too many items

Und das ist für die dritte Ausgabe

linux@terminal:~$ ./fermat.py
enter a number to find the factors   :   28888888888888888888888888888888888444444444444444444444444
Traceback (most recent call last):
  File "./fermat.py", line 8, in <module>
    for b in xrange(1,n+1):
OverflowError: Python int too large to convert to C long

Eigentlich habe ich Code für die Fermat-Faktorisierung geschrieben, um die Faktoren einer bestimmten Zahl zu ermitteln. Und meine Anforderung ist, selbst wenn ich eine hundertstellige Zahl als Eingabe gebe, sollte sie die Ausgabe für diese Eingabenummer geben.

Gibt es eine Möglichkeit, dieses Problem zu lösen? Ich benutze Ubuntu mit Python 2.7.5+

Antworten auf die Frage(2)

Ihre Antwort auf die Frage