ベンフォードの法則を確かめてみる

ベンフォードの法則を確かめてみる - みずぴー日記からですが、元は素数の分布は「ベンフォードの法則」に従っている - スラッシュドット・ジャパンの記事です。

ある数までの素数を見つけだし、それぞれの最高位の数値 (要するに 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 %

こうしたものの平均がベンフォードの法則に従うかどうかも不明ですが、数は無限にあるため、コンピュータで実証するのは逆に大変なのではないでしょうか?

tag_nawk.pngtag_nawk.pngtag_nawk.pngtag_nawk.png