Я пытаюсь сделать функцию, которая вычисляет модульную экспоненту MODEXP(a,e,p)
.Функция Python зависает для больших чисел
Эта функция принимает m
и n
в качестве параметров, где p
простое число, самое большее 2^m
и e
является 2^n
и a
это случайное число меньше, чем p
.
Вот мой код:
import random
def question_3(m,n):
list = []
i = 1
for i in range(2,2**m):
flag=True
for num in list:
if(i%num==0):
flag=False
if flag:
list.append(i)
p = choice(list)
a = randint(1,int(p)-1)
e = pow(2,n)
return pow(a, e, p)
question_3(5,5)
Для m
и n
более 20, код начинает зависать. Как я могу это предотвратить?
У вас есть цикл for, который должен работать более миллиона раз. Как быстро вы этого хотели? – geoffspear
Я хочу, чтобы при вводе, например, m и n равняется 500, он будет работать и я хочу, чтобы он занимал всего несколько мс. –
Ну, вам нужно будет разработать алгоритм, который не предполагает составление списка из 2^500 целые числа, а затем перебирать их, чтобы сделать это быстро. – geoffspear