Я хочу создать массив, содержащий g ^ 0, g ^ 1, g ^ 2.... до g ^ 100, но все до mod50 (извините, если кто-нибудь знает, как отформатировать это, чтобы силы были правильно выровнены, мне нужен небольшая помощь!)
В моем случае g = 23, поэтому мне нужен массив, который выглядит так:
[1,23,29,17...]
Я включил весь свой (неправильный) код внизу для простоты понимания. Я создал пустой массив с 201 элементом. Затем я попытался создать цикл, который сначала принимает i=0, а затем, когда мы перемещаемся по каждому элементу массива, помещает новое значение i как степень x. Я не знаю, является ли это просто кодом, в котором я сделал ошибку, или мне нужно подойти к этому с другой логикой, но независимо от того, любая помощь будет оценена!
n = 101
array = [0] * n
g = 23
i = 0
for i in array:
if i<100:
x = g**i
print(x%50)
i = i + 1
array
Это вывод, который я получаю из этого кода:
[1,1,1,1,1...]
На этот первоначальный вопрос был дан ответ ниже
Мне было интересно, можно ли применить ту же логику, когда вместо g ^ i в качестве требуемых выходов это будет h (g ^ (-in)) с h = 20, n = 18 и g = 23, как раньше. Я пробовал это и получаю неверные значения в своем массиве, код, который я пробовал:
h = 20
n = 18
g = 23
array2 = [h*(g**((-i)*n))%500 for i in range(100+1)]
@ScottHunter извините, я забыл строку, которую я сейчас включил в редактирование
Переменная яя> изначально будет равна нулю, вы добавите к ней 1, затем она снова станет нулевой, когда будет получено следующее значение из множество. Любое значение, возведенное в степень 0, равно 1
IIUC, вы можете использовать понимание списка:
g = 23
out = [g**i%50 for i in range(100+1)]
выход:
[1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1]
Или, может быть, лучше, используя numpy:
import numpy as np
a = 23**np.arange(100+1)%50
выход:
array([ 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 43, 33, 49,
17, 13, 29, 47, 15, 41, 15, 19, 13, 21, 9, 39, 9, 25, 25, 9, 1,
1, 29, 1, 27, 25, 9, 17, 39, 13, 39, 47, 33, 11, 39, 43, 33, 21,
5, 31, 29, 19, 9, 25, 43, 5, 21, 13, 33, 49, 43, 9, 29, 29, 49,
33, 15, 21, 11, 3, 37, 7, 7, 41, 27, 31, 33, 37, 39, 45, 17, 45,
29, 19, 43, 23, 13, 49, 17, 7, 43, 19, 33, 29, 35, 15, 35, 9])
Вы ничего не делаете со своим массивом, просто используете его как генератор нулей. Таким образом, условие i < 100
всегда истинно, а x всегда равно 1. Ваш i = i+1
перезаписывается на 0 в каждом цикле.
Спасибо, это действительно полезно, я добавил дополнительный вопрос в основной текст (так было проще представить), я не знал, есть ли у вас какие-либо идеи?
Да, вы можете выполнять любые операции с фиксированными переменными таким же образом. Я не знаю, какой результат вы ожидаете. Просто убедитесь, что вы уважаете приоритеты оператора.
Этот код не «возвращает» то, что вы утверждаете.