(Jan-03-2019, 10:10 PM)nilamo Wrote: Have you tried xrange()
yet?
With this number: 191561942608236107294793378084303638130997321548169216
Hi nilamo,
Thanks for the quick response. This is the new error with xrange.
Traceback (most recent call last):
File "C:\Python27\perfect numbers cheker.py", line 24, in <module>
for pair in factor_number(number):
File "C:\Python27\perfect numbers cheker.py", line 16, in factor_number
return [(x, n // x) for x in xrange(1, root + 1) if n % x == 0]
OverflowError: Python int too large to convert to C long
import math
KB = 1024
MB = 1024 * 1024
def perfect_number(number, factors):
sum_of_factors = sum(factors) - number
if sum_of_factors == number:
return "The number {} is a Perfect number!".format(number)
else:
return "The number {} is not a Perfect number!".format(number)
def factor_number(n):
root = int(round(math.sqrt(n), 0))
return [(x, n // x) for x in xrange(1, root + 1) if n % x == 0]
if __name__ == '__main__':
with open('6.txt', buffering=1*MB) as bigggg:
for num in bigggg:
number = int(num)
factors = []
for pair in factor_number(number):
factors.extend(pair)
print(perfect_number(number, factors))
factors = []
for pair in factor_number(6):
factors.extend(pair)
print(perfect_number(6, factors))
nilamo,
2**19-1*(2**18) works
The number 137438691328 is a Perfect number!