(Jan-03-2019, 10:10 PM)nilamo Wrote: Have you tried xrange()
yet?
With this number: 191561942608236107294793378084303638130997321548169216Hi 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!