I want to create an array that contains g^0, g^1, g^2…. up to g^100 but all to mod50 (apologies if anyone knows how to format this so the powers are properly aligned I need a bit of help!)
In my case g = 23, so I would want an array that looks like:
[1,23,29,17...]
I’ve included all my (incorrect) code at the bottom for ease of understanding. I have created an empty array with 201 items. I then tried to create a loop which takes i=0 initially and then as we move through each element of the array puts the new value of i as the power of x. I don’t know whether it’s just the code I have made an error with or I need to approach this with a different logic, but regardless any help would be appreciated!
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
This is the output I am getting from this code:
[1,1,1,1,1...]
This initial question has been answered below
I was wondering if the same logic can be applied when instead of g^i as the required outputs, it would be h(g^(-in)) with h = 20, n = 18 and g = 23 as before. I have tried this and am getting incorrect values in my array, code I tried:
h = 20 n = 18 g = 23 array2 = [h*(g**((-i)*n))%500 for i in range(100+1)]
Advertisement
Answer
IIUC, you can use a list comprehension:
g = 23 out = [g**i%50 for i in range(100+1)]
output:
[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]
Or maybe better, using numpy:
import numpy as np a = 23**np.arange(100+1)%50
output:
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])
why your code failed
You are not doing anything with your array, just using it as a generator of 0s. So the condition i < 100
is always True and x is always 1. Your i = i+1
is overwritten by 0 at each loop.