- Haskellのリストと集合内包表現(だけ)を使って素数判定、自然数の増加と疎の自然数までの素数の数の増加についての関数を作る
- ある自然数が素数であるかどうかの判定をその数より1より小さい自然数までのすべてで割った余りが0でないかどうかを判定するより、その自然数までの素数で割った余りが…とする方が処理は速そうだが、ひとまず、その工夫はしないでおこう
let myprime x = (length ([y | y <- [2.. x-1], x `mod` y==0]) )
let myprime2 x = ((myprime x) == 0)
let myprime3 x = [y | y <- [2 .. x], (myprime2 y)]
myprime4 x = length ( myprime3 x)
let myprime5 x = [myprime4 y | y <- [2 ..x]]
Prelude> myprime 12
4
Prelude> myprime2 12
False
Prelude> myprime2 13
True
Prelude> myprime3 12
[2,3,5,7,11]
Prelude> myprime4 12
5
Prelude> myprime5 12
[1,2,2,3,3,4,4,4,4,5,5]