Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OverflowError Python int too large to convert to C long

Tags:

#!/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 

when I run this code it is throwing different types of errors for different inputs.

The following is the one kind of input

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 

This is for second input

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 

And this is for third output

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 

Actually I was writing code for Fermat factorization to find the factors of a given number. And my requirement is even if give a hundred digit number as input it should give the output for that input number.

Is there any way to get rid this kind of problem? I am using Ubuntu with python 2.7.5+

like image 993
Suhas Avatar asked Mar 01 '14 12:03

Suhas


People also ask

How do you overcome overflow error in Python?

Handle Overflow Error exception in Python using the try-except block. An OverflowError exception is raised when an arithmetic operation exceeds the limits to be represented. This is part of the ArithmeticError Exception class.

How do you convert long to int in Python?

Number Type Conversion Type int(x) to convert x to a plain integer. Type long(x) to convert x to a long integer. Type float(x) to convert x to a floating-point number. Type complex(x) to convert x to a complex number with real part x and imaginary part zero.

What is long in Python?

A long is an integer type value that has unlimited length. By converting a string into long we are translating the value of string type to long type. In Python3 int is upgraded to long by default which means that all the integers are long in Python3. So we can use int() to convert a string to long in Python.


1 Answers

Annoyingly, in Python 2, xrange requires its arguments to fit into a C long. There isn't quite a drop-in replacement in the standard library. However, you don't quite need a drop-in replacement. You just need to keep going until the loop breaks. That means you want itertools.count, which is like an xrange that just keeps going:

import itertools for b in itertools.count(1):     ... 

Also, note that your code has other bugs. It attempts to apply Fermat factorization to even numbers, but Fermat factorization doesn't work on even numbers. Additionally, it fails to consider the case where n is a square, so it won't work for n=9.

like image 172
user2357112 supports Monica Avatar answered Oct 02 '22 14:10

user2357112 supports Monica