over 3 years ago

素数定理

$$
\theta(x) = \sum_{p\leq x}\log p \\
\lim_{x\rightarrow \infty}\frac{\theta(x)}{x}=1
$$

ホントかなー?と思って検証してみました

友人が面白い記事を書いてて 素数の組の分数が実数の中で稠密である ということを初めて知ったのですが、それ以前に書いてあった素数定理が面白かったので実際に見てみることにしました。
書いてあった素数定理は冒頭に述べたものでよく知ってる素数定理とは少し形が違うのですが同値性の証明はわかりやすく書いてある文献があったのでそっちを参考にしてください。
検証と言ってもちゃんと証明したわけではなくて小さい\(x\)に対して\(\frac{\theta(x)}{x}\)の値がどう振る舞うのかをグラフで見てみました。
実際に計算したプログラムはこちら

isPrime :: Int -> Bool
isPrime x = not $ any divisible $ takeWhile notTooBig [2..] where
     divisible y = x `mod`y == 0
     notTooBig y = y*y <= x

theta :: Int -> Float
theta x = sum $ map (log.fromIntegral) $ takeWhile (<=x) $ filter isPrime [2..]

main = print $ map (\n -> (theta n)/(fromIntegral n)) [1..100000]

isPrimeHaskell prime test を参考にしています。
結果をプロットした図です。


横軸が\(x\)で縦軸が\(\frac{\theta(x)}{x}\)です。
見事に1に漸近してますね!!
下から1に近づいていますがずっと下かどうかはわかりません
もしかしたらスキューズ数のようにもっと大きな数で1を超えるところがあるかもしれませんね

← 人気投票結果発表! #ウチ姫 クリスマスキャロルの単語出現頻度 →
 
comments powered by Disqus