ベンフォードの法則を確かめてみる
ベンフォードの法則を確かめてみる - みずぴー日記からですが、元は素数の分布は「ベンフォードの法則」に従っている - スラッシュドット・ジャパンの記事です。
ある数までの素数を見つけだし、それぞれの最高位の数値 (要するに 1 文字目) の統計を計算します。
#! /usr/bin/gawk -f
# benford_law.awk
BEGIN {
num = ARGV[1] ? ARGV[1] : 5000;
for (i = 1; i <= num; i++) {
if (is_prime(i)) {
stat[substr(i, 1, 1)]++;
total++;
}
}
for (i = 1; i <= 9; i++) {
print i ": " stat[i] " " stat[i] / total * 100 " %";
}
}
# is_prime(): 素数の判定
# in: 数値
# out: 素数なら入力された数、そうでないなら 0
function is_prime(num, div) {
for ( div = 2; div <= num; div++ ) {
if ( div * div > num ) {
return num;
break;
}
if ( num % div == 0 ) {
return 0;
}
}
}
既に、is_prime() 関数は AWK Users JP :: 素数の二進法表記などでも使われているものを利用しています。
デフォルトの 5000 で実行してみます。
$ mawk -f benford_law.awk 1: 160 23.9163 % 2: 146 21.8236 % 3: 139 20.7773 % 4: 139 20.7773 % 5: 17 2.54111 % 6: 18 2.69058 % 7: 18 2.69058 % 8: 17 2.54111 % 9: 15 2.24215 %
ベンフォードの法則を確かめてみる - みずぴー日記の解答とは合っているようですが、ベンフォードの法則には合っていないようです。
当たり前かもしれませんが、どこまでの素数を計算させるかで結果の差が大きくなります。
$ mawk -f benford_law.awk 10000 1: 160 13.0187 % 2: 146 11.8796 % 3: 139 11.31 % 4: 139 11.31 % 5: 131 10.6591 % 6: 135 10.9845 % 7: 125 10.1709 % 8: 127 10.3336 % 9: 127 10.3336 % $ mawk -f benford_law.awk 20000 1: 1193 52.7409 % 2: 146 6.45447 % 3: 139 6.145 % 4: 139 6.145 % 5: 131 5.79134 % 6: 135 5.96817 % 7: 125 5.52608 % 8: 127 5.6145 % 9: 127 5.6145 % $ mawk -f benford_law.awk 30000 1: 1193 36.7643 % 2: 1129 34.792 % 3: 139 4.28351 % 4: 139 4.28351 % 5: 131 4.03698 % 6: 135 4.16025 % 7: 125 3.85208 % 8: 127 3.91371 % 9: 127 3.91371 % $ mawk -f benford_law.awk 40000 1: 1193 28.3845 % 2: 1129 26.8618 % 3: 1097 26.1004 % 4: 139 3.30716 % 5: 131 3.11682 % 6: 135 3.21199 % 7: 125 2.97407 % 8: 127 3.02165 % 9: 127 3.02165 % $ mawk -f benford_law.awk 50000 1: 1193 23.2418 % 2: 1129 21.9949 % 3: 1097 21.3715 % 4: 1069 20.826 % 5: 131 2.55211 % 6: 135 2.63004 % 7: 125 2.43522 % 8: 127 2.47419 % 9: 127 2.47419 % $ mawk -f benford_law.awk 60000 1: 1193 19.6962 % 2: 1129 18.6396 % 3: 1097 18.1113 % 4: 1069 17.649 % 5: 1055 17.4179 % 6: 135 2.22883 % 7: 125 2.06373 % 8: 127 2.09675 % 9: 127 2.09675 % $ mawk -f benford_law.awk 70000 1: 1193 17.2026 % 2: 1129 16.2797 % 3: 1097 15.8183 % 4: 1069 15.4146 % 5: 1055 15.2127 % 6: 1013 14.6071 % 7: 125 1.80245 % 8: 127 1.83129 % 9: 127 1.83129 % $ mawk -f benford_law.awk 80000 1: 1193 15.2227 % 2: 1129 14.406 % 3: 1097 13.9977 % 4: 1069 13.6404 % 5: 1055 13.4618 % 6: 1013 12.9259 % 7: 1027 13.1045 % 8: 127 1.62052 % 9: 127 1.62052 % $ mawk -f benford_law.awk 90000 1: 1193 13.6922 % 2: 1129 12.9576 % 3: 1097 12.5904 % 4: 1069 12.269 % 5: 1055 12.1083 % 6: 1013 11.6263 % 7: 1027 11.787 % 8: 1003 11.5115 % 9: 127 1.45759 %
こうしたものの平均がベンフォードの法則に従うかどうかも不明ですが、数は無限にあるため、コンピュータで実証するのは逆に大変なのではないでしょうか?




