Skip to content
Advertisement

Iteratively apply a function to an array

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.

User contributions licensed under: CC BY-SA
10 People found this is helpful
Advertisement