(Perl)Math::Prime::Util 素敵な回文素数を探す

整数・自然数・素数

回文素数自体が素敵なのですが、その中でも見た目にも美しい素数を探したいと思います。
今回はライブラリで素数を抽出します。perl(with CPAN)を使います。

# cpan Math::Prime::Util

primesに素数を列挙したい範囲を指定すれば配列に素数が取得できます。

takk@deb83:~$ cat -n test.pl
     1	use Math::Prime::Util ':all';
     2	foreach $p (@{primes(1,100)}){
     3		print "$p ";
     4	} 
     5	print "\n";
takk@deb83:~$ 

100までの素数です。

takk@deb83:~$ perl test.pl | fold -s40
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 
takk@deb83:~$ 

これを回文素数のみ取り出すように修正します。
数字の先頭と末尾を取り出して、片方だけreverseして比較すれば容易に回文素数が抽出できます。

takk@deb83:~$ cat -n palindromic.pl
     1	use Math::Prime::Util ':all';
     2	foreach $p (@{primes(1,100000)}){
     3		$l = int length($p)/ 2;
     4		$p =~ /(.{$l}).?(.{$l})$/;
     5		print "$p " if($1 eq reverse $2);
     6	} 
     7	print "\n";
takk@deb83:~$ perl palindromic.pl | fold -s50
2 3 5 7 11 101 131 151 181 191 313 353 373 383 
727 757 787 797 919 929 10301 10501 10601 11311 
11411 12421 12721 12821 13331 13831 13931 14341 
14741 15451 15551 16061 16361 16561 16661 17471 
17971 18181 18481 19391 19891 19991 30103 30203 
30403 30703 30803 31013 31513 32323 32423 33533 
34543 34843 35053 35153 35353 35753 36263 36563 
37273 37573 38083 38183 38783 39293 70207 70507 
70607 71317 71917 72227 72727 73037 73237 73637 
74047 74747 75557 76367 76667 77377 77477 77977 
78487 78787 78887 79397 79697 79997 90709 91019 
93139 93239 93739 94049 94349 94649 94849 94949 
95959 96269 96469 96769 97379 97579 97879 98389 
98689 
takk@deb83:~$ 

さて、ここから見た目にも美しい数字を取り出したいのですが、
同じ数字が5回連続で現れる回文素数に限定してみます。
まずは、列挙する数を1000000000に増やして、

takk@deb83:~$ cat -n palindromic.pl
     1	use Math::Prime::Util ':all';
     2	foreach $p (@{primes(1,1000000000)}){
     3		$l = int length($p)/ 2;
     4		$p =~ /(.{$l}).?(.{$l})$/;
     5		print "$p " if($1 eq reverse $2);
     6	} 
     7	print "\n";

5回連続同じ数字が現れる素数に関しては、正規表現で探します。

takk@deb83:~$ perl palindromic.pl | perl -ne 'print if /(.)\1{4}/'
1333331
1444441
1777771
3222223
3444443
7666667
9222229
9888889
103333301
121111121
131111131
139999931
140000041
148888841
163333361
169999961
175555571
176666671
179999971
181111181
185555581
188888881
190000091
199999991
301111103
304444403
308888803
319999913
322222223
323333323
331111133
355555553
392222293
704444407
716666617
722222227
728888827
746666647
772222277
779999977
790000097
796666697
908888809
937777739
946666649
964444469
973333379
974444479
982222289
992222299
995555599
takk@deb83:~$ 

はい。決まりました。199999991とか素敵です。嗚呼、感覚が麻痺してますね。

ところで、上で抽出した7桁の数字をもう一度良く見てみると、

1333331
1444441
1777771
3222223
3444443
7666667
9222229
9888889

頭と末の数字を縦に読むと11133799となっていますが、これも素数ですね。
素数って面白いです。

コメント

タイトルとURLをコピーしました