I am trying to get the first N prime numbers in the following way:
@sp.entry_point def n_primes(self, num): primes =  p = sp.local("p", 1) i = sp.local("i", 3) n = sp.local("n", num) c = sp.local("c", 0) sp.while p.value < n.value: sp.while (i.value % primes[c.value] != 0) & (primes[c.value] * primes[c.value] <= i.value): c.value += 1 sp.if (i.value % primes[c.value] != 0): primes.append(i.value) p.value += 1 c.value = 0 i.value += 2 self.data.last_prime = primes[n.value - 1]
but I get the error: "Error: list indices must be integer, not Expr" on the second while loop (by testing this on smartpy.io/dev). I've tried not using smartpy local variables, but then it doesn't work properly and it gets stuck in an infinite loop for some reason. I have also tried using a for loop instead of a while ("for x in primes") but then I get a "declaration error, x variable escapes its scope", and also couldn't make it work with the conditions that I wanted.
Is there any way of telling the program that the expression used as the list index is an integer?
Note: The equivalent of this program works fine in normal python.