prime = [x| x<-[2,3..], null [y|y<-[2,3..floor $ sqrt(fromIntegral x)],mod x y ==0] ] primes r [] = r primes r (p:ps) = if null [y|y<-r,mod p y == 0] then p:(primes (p:r) ps) else primes r ps pr = 2:(ps [3,5..]) ps (x:xr) = x:(ps (filter rem xr)) where rem y = (mod y x) /=0