Good job. There's still some room for improvement in your algorithm, though. First, since you're only going through odd values of A, there's no need to test for division by 2. In fact, there's no need to test for division by 2, 4, 6, 8, 10, etc. because we already know that an even number can't divide an odd number. So starting B at 3 and skipping every other value can basically halve the number of trial divisions needed.

That's an easy optimization. If you think about it, there's a lot more divisions you can skip. For example, you never need to trial divide by 9. Why is this? Because you already divided by 3 and failed; if A is not a multiple of 3 then it is for sure not a multiple of 9. Basically, you don't need to do trial division with any composite numbers, because if you're dividing A by a composite number, you've already tried dividing A by all of its prime factors and failed. So the loop `For(B,2,iPart(√(A)))` could be hugely optimized if you could somehow only divide by prime numbers.

Now how would you do that? It sure would be helpful to have a list of all the primes less than or equal to √(A), wouldn't it…?

So here's my version of the prime finding program:

`:{2,3→PRM`

:For(N,5,50,2

:1

:While Ans and ∟PRM(Ans+1)²≤N

:Ans+1

:Ansnot(not(fPart(N/∟P(Ans

:End

:If Ans

:N→∟PRM(1+dim(∟PRM

:End

:∟PRM

The way I've written this program is concise and fairly optimized, but it's hard to understand and kind of hides the way the algorithm works. I don't recommend trying to program all your programs this way when you start out, and I'm not suggesting that this is the best or the only way to do it.