[アルゴリズム][python]プログラマー小数点を検索
5780 ワード
質問する
小数点を検索
イニシャルコード
def solution(n):
num_of_prime = 0
for num in range(2, n+1):
is_prime = True
for divisor in range(2, num//2+1):
if num % divisor == 0:
is_prime = False
break
if is_prime:
num_of_prime += 1
return num_of_prime
前述したように、結果はタイムアウトしました.条件により、nは2以上1000000以下の自然数である.
nは最大100万程度で,単純反復解の複雑さはO(n^2)であり,タイムアウトが発生する可能性がある.
問題と解決策
このブログ(画像、アルゴリズムソース)を参照し、エラトネスのふるい法を用いて解決した.
アルゴリズム#アルゴリズム#
最終コード
def solution(n):
nums = [False,False] + [True]*(n-1) # 0, 1 제외 나머지 소수로 간주
for i in range(2, int(n ** 0.5)+1): # 2부터 n의 제곱근(n의 최대 약수가 n의 제곱근 이하)까지의 모든 수를 확인하며 소수를 검사
if nums[i]: # i가 소수인 경우
for j in range(2*i, n+1, i): # i이후 i의 배수를 모두 소수에서 제거(False)
nums[j] = False
return nums.count(True)
Reference
この問題について([アルゴリズム][python]プログラマー小数点を検索), 我々は、より多くの情報をここで見つけました https://velog.io/@zini/프로그래머스소수찾기12921テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol