labunix's blog

labunixのラボUnix

openssl/factorで双子素数を列挙する

■差が2である2つの素数の組のこと。

 双子素数
 http://ja.wikipedia.org/wiki/%E5%8F%8C%E5%AD%90%E7%B4%A0%E6%95%B0

■以下リンクに1607まである。

 Lesser of twin primes. 
 http://oeis.org/A001359

■まずはWikiにある197まで。

$ for n in `seq 1 200`;do \
    echo $((0x`openssl prime "$n" | awk '($3!="not"){print $1}'`)) ; \
  done | grep -v "^0\$" | \
  for m in `xargs`;do \
    echo "$m" | awk '{print ($1-2)}' | xargs factor | \
      awk '(NF==2){printf "%4d %4d\n",$2,$2+2}'; \
  done
   3    5
   5    7
  11   13
  17   19
  29   31
  41   43
  59   61
  71   73
 101  103
 107  109
 137  139
 149  151
 179  181
 191  193
 197  199

■「Lesser of twin primes.」のリスト形式の取得。

$ w3m -dump http://oeis.org/A001359/list | \
  awk '(NR>12&&NR<65){print}' | \
  awk '{if(NR==1){print " n  a(n)"}else{printf "%2d %4d\n",$1,$2}}'
 n  a(n)
 1    3
 2    5
 3   11
 4   17
 5   29
 6   41
 7   59
 8   71
 9  101
10  107
11  137
12  149
13  179
14  191
15  197
16  227
17  239
18  269
19  281
20  311
21  347
22  419
23  431
24  461
25  521
26  569
27  599
28  617
29  641
30  659
31  809
32  821
33  827
34  857
35  881
36 1019
37 1031
38 1049
39 1061
40 1091
41 1151
42 1229
43 1277
44 1289
45 1301
46 1319
47 1427
48 1451
49 1481
50 1487
51 1607

■ヘッダを付けて同じ形式で。

$ echo " n  a(n)"; \
  for n in `seq 1 1610`;do \
    echo $((0x`openssl prime "$n" | awk '($3!="not"){print $1}'`)) ; \
  done | grep -v "^0\$" | \
  for m in `xargs`;do \
    echo "$m" | awk '{print ($1-2)}' | xargs factor | \
      awk '(NF==2){printf "%4d\n",$2}'; \
  done | nl -w 2 -n rn | sed s/'\t'/" "/g
 n  a(n)
 1    3
 2    5
 3   11
 4   17
 5   29
 6   41
 7   59
 8   71
 9  101
10  107
11  137
12  149
13  179
14  191
15  197
16  227
17  239
18  269
19  281
20  311
21  347
22  419
23  431
24  461
25  521
26  569
27  599
28  617
29  641
30  659
31  809
32  821
33  827
34  857
35  881
36 1019
37 1031
38 1049
39 1061
40 1091
41 1151
42 1229
43 1277
44 1289
45 1301
46 1319
47 1427
48 1451
49 1481
50 1487
51 1607