Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding prime numbers using list comprehention

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?

like image 675
JavaSa Avatar asked Jun 25 '15 08:06

JavaSa


3 Answers

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]
like image 172
falsetru Avatar answered Oct 19 '22 20:10

falsetru


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})
like image 29
div Avatar answered Oct 19 '22 19:10

div


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)) ) )]
like image 33
Cibas Mec Avatar answered Oct 19 '22 19:10

Cibas Mec