# Prime numbers between given two numbers in Julia and Python

See the Python code for finding prime numbers between given two numbers lower and upper
‘’'lower = 3
upper = 15

print(“Prime numbers between”, lower, “and”, upper, “are:”)

for num in range(lower, upper + 1):

``````   for i in range(2, num):
if (num % i) == 0:
break
else:
print(num)
``````

‘’’

Python Output:
Prime numbers between 3 and 15 are:
3
5
7
11
13

Almost similar code in Julia gives incorrect output. See the Julia code below
‘’'lower = 3
upper = 15
println("Prime numbers between ", lower, " and “, upper, " are:”)
for num in lower:upper

``````   for i in 2: num-1
if (num % i) == 0
break

else
println(num)
break
end
end
``````

end
‘’’
Julia Output:
Prime numbers between 3 and 15 are:
3
5
7
9
11
13
15

Clearly, 9 and 15 are not primes. Why does Python code gives correct output and Julia code does not. Any way to fix it using the same algorithmic logic?

Julia doesn’t have an `else` clause for `for` loops like Python. You can use a boolean variable to record if the mod check `break` never ran.

1 Like

You can use a boolean variable to record if the mod check `break` never ran. – can you explain what do you mean by that?

Thanks Kristoffer. Appreciate the help but I don’t understand what you mean . Can you explain in slight detail. I don’t understand when you say " You can use a boolean variable to record if the mod check `break` never ran." And moreover, I am running else clause for the if condition in my loop in Julia and for “for” loop.

Your code needs to check that `(num % i) == 0` is not true for all the numbers in the range and only then print. Right now it oeuvre if it is false for only one number in the range. Remove the last `break` to make it more obvious.

1 Like

‘’’
lower = 3
upper= 15
for num =lower:upper
for j = 2:num-1
if (num%j)==0
break
else
print(num)
print(" ")

``````end

end
``````

end’’’

output after removing the last “break” is as follows
3 5 5 5 7 7 7 7 7 9 11 11 11 11 11 11 11 11 11 13 13 13 13 13 13 13 13 13 13 13 15

This question was also posted on Prime numbers between given two numbers in Julia and Python comparison - Stack Overflow. Is the answer given there clear for you?

1 Like

The code given by you on stack overflow is working correctly but my poor brain couldn’t comprehend it’s logic. If possible kindly explain. Appreciate your help though. Thank you.

1 Like

The Stack Overflow answer by @bkamins is probably quite clear to experienced Julians, but I suspect it’s difficult to understand for beginners due to the mixed usage of loops and vectorized notation, the anonymous function and the short-circuited `||`. Since the question was marked as “New to Julia” I think it might be appropriate to highlight how simple Julia code can be.

In this case I think an extra `isprime()` function improves readability and hides the loop breaking awkwardness, so here’s my suggestion:

``````function isprime(num)
for j = 2:num-1
if (num % j) == 0
return false
end
end
return true
end

function primesbetween(lower, upper)
println("Prime numbers between \$lower and \$upper are:")
for n in lower:upper
if isprime(n)
println(n)
end
end
end

julia> primesbetween(3,15)
Prime numbers between 3 and 15 are:
3
5
7
11
13
``````

I also added `primesbetween()` to emphasize how Julia code should always be wrapped in functions.

9 Likes

this is also a nice way to solve the same problem. Thanks. Really appreciate it.

I have edited the code on Stack Overflow with an explanation. Maybe here I would just add that in `any(i -> num % i == 0, 2:num-1)` the `i -> num % i == 0` part defines a function that takes a number `i` and returns `true` if `i` divides `num`.

1 Like

I just wanted to stop by to throw in my two sense regarding the provided solution. I’ve personally found that “when in doubt, make a new function”. I’m not sure if the real programmers among the user base agree with that or not, but as a novice, changing my mindset to use functions as a go-to solution for my problems helped me make Julia work for me.