アルゴリズムの複雑さは
O(n(logn)(loglogn))
ビット操作です。
どうやってそこに着くの?
複雑さというloglogn
用語が含まれているということは、sqrt(n)
どこかにあることを私に教えてくれます。
最初の100個の数字(n = 100
)でふるいを実行していると仮定します。数字を複合としてマークするのに一定の時間がかかる(配列の実装)と仮定すると、使用mark_composite()
する回数は次のようになります。
n/2 + n/3 + n/5 + n/7 + ... + n/97 = O(n^2)
そして、次の素数を見つけるには(たとえば、の7
倍数であるすべての数に取り消し線を引いた後にジャンプする5
)、操作の数はになりますO(n)
。
したがって、複雑さはになりますO(n^3)
。同意しますか?