[浄水論]エラトスのふるい
5683 ワード
出典:[これがコードテスト]本
では、テストステロンの体はO(Nx logn)時間であり、線形時間内に運動できるほど速い. このBC 274年生まれの人は、どう思いますか Pythonコードでエラトネスのボディを実現しました. 小数とは、2より大きい自然数のうち、1と自分以外を区別しない自然数をいう. 記述コードはO(X^1/2)で小数を判別できる.
Xを判別しないで、Xの平方根を検査するだけです.
上のコードはO(X^1/2)時間の複雑さで効率的です.例えば、判別数が100,000程度であれば、演算により1000回以下の値を見つけることができる.
しかし、1つの数に対して、小数であることを判別する必要がない場合ではなく、1つの数の範囲を与えた場合、その整数の範囲内に存在するすべての小数が見つかった場合、どうなるのでしょうか.
テストステロンアルゴリズムは、複数の数が素数であるか否かを判別する際に用いられる代表的なアルゴリズムである.
エラス菌体コード
少数の判別
Xを判別しないで、Xの平方根を検査するだけです.
import math
def is_prime_number(x):
if x == 1 : return False
for i in range(2, int(math.sqrt(x))+1):
if x % i == 0: return False
return True
print(is_prime_number(4))
print(is_prime_number(11))
結果:False/Trueエラトステネスのふるい
上のコードはO(X^1/2)時間の複雑さで効率的です.例えば、判別数が100,000程度であれば、演算により1000回以下の値を見つけることができる.
しかし、1つの数に対して、小数であることを判別する必要がない場合ではなく、1つの数の範囲を与えた場合、その整数の範囲内に存在するすべての小数が見つかった場合、どうなるのでしょうか.
テストステロンアルゴリズムは、複数の数が素数であるか否かを判別する際に用いられる代表的なアルゴリズムである.
import math
n = 100
array = [True for i in range(n+1)]
array[0], array[1] = False, False
for i in range(2, int(math.sqrt(n))+1):
x = 2
while i * x <= n:
array[i*x] = False
x += 1
for i in range(50,60):
print(i,':',array[i])
結果:53、59から真/偽Reference
この問題について([浄水論]エラトスのふるい), 我々は、より多くの情報をここで見つけました https://velog.io/@heyksw/정수론-에라토스테네스의-체テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol