Как рассчитать числа с большими показателями - PullRequest
0 голосов
/ 15 июня 2019

Я писал программу, в которой мне нужно вычислять безумно огромные числа.

    k = int(input())
    print(int((2**k)*5 % (10**9 + 7))

Здесь k составляет порядка 10 9 . Как и ожидалось, это было довольно медленно (для расчета потребовалось до 5 секунд), в то время как моей программе необходимо завершить вычисления за 1 секунду. После небольшого онлайн-исследования я нашел функцию pow () и написал

     p = 10**9 + 7
     print(int(pow(2, k- 1,p)*10))

Это прекрасно работает для небольших чисел, но портится при больших числах. Я могу понять, почему это происходит (потому что это, по сути, не то, что я хочу вычислить, и операция модуля с таким большим числом не влияет на вычисление с небольшими значениями k).

Я также нашел библиотеки, такие как gmpy2 и numpy, но я не знаю, как их использовать, так как я только начинающий с python.
Итак, как я могу написать выражение для того, что я хочу вычислить и которое работает достаточно быстро и не допускает ошибок при больших числах?

1 Ответ

2 голосов
/ 15 июня 2019

Вы можете оптимизировать свою работу, передав число, из которого вы хотите взять модуль, в качестве третьего аргумента встроенного pow и умножив результат на 5

def func(k):

    x = pow(2, k, pow(10,9) + 7) * 5
    return int(x)
...