управление памятью в python при выполнении больших вычислений

#python #memory-management #mathematical-optimization

#python #управление памятью #математическая оптимизация

Вопрос:

я хочу запустить простую программу с большими целыми числами. Программа предназначена для вычисления «идеального числа»

 def is_perfect(x):
    sum_of_positive_divisors = 0
    for i in range(1,(x//2) 1):
        if x%i == 0:
            sum_of_positive_divisors =i
    if x == sum_of_positive_divisors:
        return 1
    else:
        return 0

for n in range(1,32):
    print("n is %s",n)
    num = 2**(n-1)*((2**n)-1)
    if is_perfect(num):
        print(num)
  

когда я запускаю эту программу в ноутбуке jupyter. Он работает в течение длительного времени без пика в памяти.

но когда я запускаю его в командной строке. Я получаю ошибку памяти через 10 секунд.

Я работаю на Python 3.8 на Raspberry Pi 4 (8 ГБ)

пожалуйста, помогите!!

Комментарии:

1. Если я правильно следовал коду, вы выполняете около 2 ** 60 итераций. Независимо от проблемы с памятью у вас не должно быть других планов на RPi в ближайшие несколько лет.

2. Большое вам спасибо, Клаус. для выявления моей болевой точки. Я ищу оптимизацию алгоритма, если смогу получить некоторые указания

3. Я смог немного оптимизировать дальше. добавлена функция для определения, является ли (2 ^ n)-1 простым , тогда (2 ^(n-1))*((2 ^ n)-1) идеально. Я могу вычислить до n, равного 89 (менее чем за час)… и продолжаю сейчас.