素数の二進法表記
二進数表記に変換してみる - みずぴー日記や素数の二進法表記 - 西尾泰和のはてなダイアリーを見てですが、素数の二進法表記を awk でもやってみました。
素数は is_prime() という関数、2 進数への変換は dec2bin() という関数で変換しています。
#! /usr/bin/gawk -f
# bin_show.awk
BEGIN {
max = ARGV[1] ? AEGV[1] : 100;
for (i = 1; i <= max; i++) {
prime = is_prime(i);
if (prime) {
bin_num = dec2bin(prime) "";
gsub(/0/, " ", bin_num);
gsub(/1/, "+", bin_num);
printf("%10s\n", bin_num);
}
}
}
function is_prime(num, div) {
for ( div = 2; div <= num; div++ ) {
if ( div * div > num ) {
return num;
break;
}
if ( num % div == 0 ) {
return 0;
}
}
}
function dec2bin(num, rem, str) {
while (num > 0) {
rem = int(num % 2);
if (rem == 1) {
str = "1" str;
} else {
str = "0" str;
}
num = int(num / 2);
}
return str;
}
このスクリプトを実行してみます。
$ nawk -f bin_show.awk
+
++
+ +
+++
+ ++
++ +
+ +
+ ++
+ +++
+++ +
+++++
+ + +
+ + +
+ + ++
+ ++++
++ + +
+++ ++
++++ +
+ ++
+ +++
+ + +
+ ++++
+ + ++
+ ++ +
++ +
何か超高層ビルの模様のような、規則性のあるような図形に見えてきます。




