素数リスト


J言語にはp:(ピーコロン)という関数があって、p: nでn番目の素数を出します。

   p:i.5
2 3 5 7 11

これはp:を0 1 2 3 4に作用させた結果です。
さて、これはこれでいいのですが、100以下の素数のリストが欲しいというときはどうすればよいか。
J言語には^:_1(キャレットコロンマイナスいち)という逆関数を作る副詞があって、これを使ってp:の逆関数(オブバース、インバース)を11に作用させると4が算出されます。つまり、11という数字があって、これが素数とするとそれは素数リストの4+1番目の素数ということです。

   (p:^:_1) 11
4

11の代わりに100を入れた結果を使うとどうなるでしょう。以下実験。

   (p:^:_1) 100
25
   p: 25
101
   p: i.25
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
   (p:^:_1) 40
12
   p: 12
41
   p:i.12
2 3 5 7 11 13 17 19 23 29 31 37
   p: i. (p:^:_1) 40
2 3 5 7 11 13 17 19 23 29 31 37
   primes_up_to=: p: i. (p:^:_1)
   primes_up_to 40    NB.失敗!
1
   primes_up_to=: p:@:i.@:(p:^:_1)
   primes_up_to 40    NB.成功!
2 3 5 7 11 13 17 19 23 29 31 37