WillNess

Haskell,
pasted
on Jan 26:

ps = 2 : _Y ((3:) . diff [5,7..] . unionAll . map (\p> [p*p, p*p+2*p..]))
_Y g = g (_Y g)
unionAll ((x:xs):t) = x : (joyn xs . unionAll . pairs) t
where pairs (a:b:t) = joyn a b : pairs t
ordzip a b = g a b where { g a@(x:r) b@(y:q)
 x<y = (x,0):g r b  y<x = (0,y):g a q  otherwise = (x,y):g r q }
diff xs ys = [x  (x,y)< ordzip xs ys, x/=0 && y==0]
joyn xs ys = [z  (x,y)< ordzip xs ys, x/=0  y/=0, let z=max x y]
main=print$take 100 ps

Output:

[2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359,367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,503,509,521,523,541]

