やったこと
ある数以下の全素数を生成する
素数判定
mac なら gfactor、linux なら factor を利用する
gfactor 14 > 14: 2 7 gfactor 17 > 17: 17
素数の時のみ2列で終わっているので、awk を用いて2列の時のみ表示させる
gfactor 17 | awk 'NF==2{print $2}'
繰り返す
seq を使うと良い
seq 3 > 1 > 2 > 3
1000 以下 の素数を調べたければ
seq 1000 | gfactor | awk 'NF==2{print $2}'
とする
1万刻みで素数の表れる数
0-10000 までの数の中に現れる素数の数と、10000-20000の中に現れる素数の数がどれくらい違うか調べてみた
0-10000 について
wc を使う
seq 10000 | gfactor | awk 'NF==2{print $2}' | wc -w
繰り返す
for i in {0..99}; do seq $((10000*$i)) $((10000*($i+1))) | gfactor | awk 'NF==2{print $2}' | wc -w; done
上の例より多く試したい人へ
mac の場合、1000000 より大きい数を seq で流すとデフォルトでは丸め込まれちゃうのでオプション指定してあげる
seq 1000000 1000001 > 1e+06 > 1e+06 seq -f %f 1000000 1000001 > 1000000.000000 > 1000001.000000 seq -f %f 1000000 1000001 | sed 's@\..*@@'
ファイルに出力してプロット
for i in {0..99}; do seq $((10000*$i)) $((10000*($i+1))) | gfactor | awk 'NF==2{print $2}' | wc -w >> hoge; done
素数の下2桁の性質についてチェック
素数の下2桁のみ取り出す
awk を使う(substr, length)
gfactor 101 | awk 'NF==2{print substr($2, length($2)-1, length($2))}' > 01 seq 1000 | gfactor | awk 'NF==2{print substr($2, length($2)-1, length($2))}' > 2 > 3 > ... > 97
出現回数を調べる
sort してから、uniq -c でその回数を調べる
seq 1000 | gfactor | awk 'NF==2{print substr($2, length($2)-1, length($2))}' | sort | uniq -c
これだと元々1桁のもの(2,3,5,7)が、03 などと区別されてしまっていることが気になったので、少し改善
seq 1000 | gfactor | awk 'NF==2{a=0$2;print substr(a, length(a)-1, length(a))}' | sort | uniq -c
ファイルに出力してプロット
100万 以下の数について、下2桁の出現回数を調べた
カウントと出現回数を入れ替えてある
seq 1000 | gfactor | awk 'NF==2{a=0$2;print substr(a, length(a)-1, length(a))}' | \ sort | uniq -c | awk '{print $2,$1}' > RESULT
ほぼ均等!