[programmers/CodingTest/Python]小数点を検索(レベル1)
3233 ワード
問題の説明
1から入力した数字nまでの小数を返す関数を作成します.
小数は1とそれ自体の数です.
(1は小数ではありません.)
せいげんじょうけん
I/O例
n result
10 4
5 3
I/O例説明
I/O例#1
1から10の間の小数は[2,3,5,7]の4個であるため,4を返す.
I/O例#2
1から5の間の小数は3を返します.[2,3,5]の3つがあるからです.
方法
最初に1からnの間で所定の数を遍歴し,iを2からint(sqrt(i)に分け,分離がある場合はカウントしないようにコードを記述する.テストケースと精度テストはすべて合格したが、効率的には合格しなかった.
そこで에라토스테네스의 체
を使用することにした.에라토스테네스의 체
を用いて素数を求める方法が最も速いことが分かった.에라토스테네스의 체
の原理は以下の通りである.
->chk[i]がfalseの場合、
-->一時変数idxを宣言し、i*2を入れます.
-->idxがn以下の場合、while文を繰り返します.
-->chk[idx]がTrueに更新されました.
----->idx増加i.
chk의 False개수-2
を保存すると発表した.(2を使用する理由は、chkが0度と1度のFalseを格納し、0と1が小数ではないためです.)solution.py def solution(n):
chk=[False]*(n+1)
for i in range(2, n+1):
if not chk[i]:
idx=i*2
while idx<=n:
chk[idx]=True
idx+=i
answer=chk.count(False)-2
return answer
Reference
この問題について([programmers/CodingTest/Python]小数点を検索(レベル1)), 我々は、より多くの情報をここで見つけました
https://velog.io/@xx0hn/Programmers-CodingTest-Python-소수-찾기-ke1jxkd5
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
def solution(n):
chk=[False]*(n+1)
for i in range(2, n+1):
if not chk[i]:
idx=i*2
while idx<=n:
chk[idx]=True
idx+=i
answer=chk.count(False)-2
return answer
Reference
この問題について([programmers/CodingTest/Python]小数点を検索(レベル1)), 我々は、より多くの情報をここで見つけました https://velog.io/@xx0hn/Programmers-CodingTest-Python-소수-찾기-ke1jxkd5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol