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+