@Marty1337

Как расшифровать Exit code?

Решаю задачу с проекта Эйлера, столкнулся с такой проблемой:
Простые делители числа 13195 - это 5, 7, 13 и 29.
Каков самый большой делитель числа 600851475143, являющийся простым числом?
# Каков самый большой делитель числа 600851475143, являющийся простым числом?
import sys
sys.setrecursionlimit(2**20)
d = 2
n = 1241452
def main():

    ar = []

    def delit(d):
        global a
        global n
        if n % d == 0:
            ar.append(d)
            n = n/d
            if n == 1:
                print(ar)
            else:
                delit(2)
        else:
            a = simp_ind(d)


    def simp_ind(d):
        p = 2
        d +=1
        while d % p != 0:
            p += 1
        if p == d:
            delit(d)
        else: simp_ind(d)

    delit(d)

if __name__ == '__main__':
    main()

До числа n = 1241451 Задачу решает, если число больше, выдает ошибку:
Process finished with exit code -1073741571 (0xC00000FD)
  • Вопрос задан
  • 488 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Переполнение стека.
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Вы поставили ограничение глубины стека таким большим, что память заканчивается задолго до достижения этого лимита, поэтому ваш процесс интерпретатора падает не показывая валидную ошибку.
Не стоит делать такой неадекватный лимит стека, тогда ваш интерпретатор упадёт с другой ошибкой - превышен лимит рекурсивных вызовов.
А уж эту проблему решать надо оптимизацией алгоритма. Ваш слишком жаден до стека.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Lord_of_Rings
@Lord_of_Rings
Python developer
Слишком большое число :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы