@lukepker

Как ускорить работу программы?

Пишу для лабораторной работы программу для поиска цифр числа пи. Написал следующий код.
import time
start_time = time.time()

digits = 10000
result_pi = []
length = digits * 10 // 3
list_for_finding = []
denominators = [0]
false_nums = 0

i = 0
while i < length:
    list_for_finding.append(2)
    if i != 0 and i != length:
        denominators.append(i * 2 + 1)
    i += 1

digit = 0
while digit < digits:
    print(digit)
    print('{}/{}'.format(digit, digits))
    perenos = 0
    i = length - 1
    while i > 0:
        dec = list_for_finding[i] * 10
        sum = dec + perenos
        list_for_finding[i] = sum % denominators[i]
        perenos = sum // denominators[i] * i
        i -= 1

    dec = list_for_finding[0] * 10
    sum = dec + perenos
    list_for_finding[0] = sum % 10
    pi_for_append = sum // 10

    if pi_for_append < 9:
        false_nums = 1
        result_pi.append(pi_for_append)
    elif pi_for_append == 9:
        false_nums += 1
        result_pi.append(pi_for_append)
    else:
        i = len(result_pi) - 1
        while false_nums != 0:
            if result_pi[i] == 9:
                result_pi[i] = 0
            else:
                result_pi[i] += 1
            false_nums -= 1
            i -= 1
        false_nums = 1
        result_pi.append(0)
    digit += 1

i = 0
while i < len(result_pi):
    result_pi[i] = str(result_pi[i])
    i += 1
result_pi[0] += '.'
print(''.join(result_pi))
print(time.time() - start_time)

Он работает, но при поиске, скажем, 10000 символов делает это около 5 минут, при этом процессор 4ггц и 16гб РАМ почти не загружены. Подскажите, пожалуйста, может можно как то позволить pycharm (пишу в нем) использовать больше ресурсов компьютера?
  • Вопрос задан
  • 148 просмотров
Пригласить эксперта
Ответы на вопрос 1
fox_12
@fox_12 Куратор тега Python
Расставляю биты, управляю заряженными частицами
А вам обязательно каждую итерацию в консоль выводить?

Замените:
...
while digit < digits:
    print(digit)
    print('{}/{}'.format(digit, digits))
...

на
...
while digit < digits:
    if not digit % 1000:
         print('{}/{}'.format(digit, digits))
...

Уже сэкономите часть времени
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы