白駿解題-エラトネスの体2960号
3885 ワード
📜 問題を理解する
エラトネスのふるいはN以下の素数をすべて探す有名なアルゴリズムである.
このアルゴリズムは以下の通りです.
2からNまですべての整数を書き出します.
クリアされていない数の最小数を探します.これはPと言います.この数は小数です.
Pをクリアし、クリアされていないPの倍数をサイズ順にクリアします.
もしあなたがまだすべての数字を削除していないならば、再び第2段階に入ります.
N,Kが与えられたとき,K回の削除数を求めるプログラムを作成してください.
💡 問題の再定義
エラトステネスのふるいからK番目に消された数を求めた.
▼▼▼計画作成
エラトネスの体のアルゴリズムに従って消せばいいです.ただ上は2*iから消すのではなく、iから消すのです.つまり、2,3も少数ですが、削除されることを考えてプログラミングしましょう.
💻 計画の実行
エラトネスの体を知っていれば、簡単に解けます.
エラトネスのふるいはN以下の素数をすべて探す有名なアルゴリズムである.
このアルゴリズムは以下の通りです.
2からNまですべての整数を書き出します.
クリアされていない数の最小数を探します.これはPと言います.この数は小数です.
Pをクリアし、クリアされていないPの倍数をサイズ順にクリアします.
もしあなたがまだすべての数字を削除していないならば、再び第2段階に入ります.
N,Kが与えられたとき,K回の削除数を求めるプログラムを作成してください.
💡 問題の再定義
エラトステネスのふるいからK番目に消された数を求めた.
▼▼▼計画作成
エラトネスの体のアルゴリズムに従って消せばいいです.ただ上は2*iから消すのではなく、iから消すのです.つまり、2,3も少数ですが、削除されることを考えてプログラミングしましょう.
💻 計画の実行
if __name__ == '__main__':
N, K = map(int, input().split())
prime_list = [False, False] + [True] * (N - 1)
cnt = 0
for i in range(2, N + 1):
if prime_list[i]:
for j in range(i, N+1, i):
if prime_list[j]:
prime_list[j] = False
cnt += 1
if cnt == K:
print(j)
exit(0)
🤔 振り返るエラトネスの体を知っていれば、簡単に解けます.
Reference
この問題について(白駿解題-エラトネスの体2960号), 我々は、より多くの情報をここで見つけました https://velog.io/@delicate1290/백준-문제-풀이-에라토스테네스의-체-2960번テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol