I was trying to generate all prime numbers in range x to y. I tried simple example first: range(10,11)
which means to check if 10 is a prime number:
Here is my code:
prime_list = [x for x in range(10, 11) for y in range(2,x) if x % x == 0 and x % 1 == 0 and x % y != 0]
I know that the thing is missing the option to tell the expression that x%y != 0
should be checked for all y in range (2,x)
and return true if and only if all have met this condition.
How do we do that?
Use all
to check all elements (from 2 upto x-1) met conditions:
>>> [x for x in range(2, 20)
if all(x % y != 0 for y in range(2, x))]
[2, 3, 5, 7, 11, 13, 17, 19]
One way using set comprehension can be
list(set(range(2,11)) - {x for x in range(11) for y in range(2,x) if x%y == 0})
You could optimize more using the concept of the square root so as not to iterate throughout the list and calculate the prime numbers faster in the following way!!
import math
[x for x in range(2, 21) if all(x % y != 0 for y in range(2, int(math.sqrt(x + 1)) ) )]
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With