N 以下の素数の個数

  • 数と計算
  • 問題 08
  • やさしい
  • 目安 11 分

「n 以下の素数はいくつあるか」という質問が何度も与えられる。素数を 1 つずつ割って確かめず、先にまとめてふるい分けておく練習です。

本番の試験は PC で受けることが多いので、PC での練習をすすめます。スマホでも、読んで、書いて、採点するところまで動きます。

入力は標準入力から読み、答えは標準出力に書きます。1 テストあたり 3 秒までです。

問題

素数は、2 以上の整数のうち、1 とその数自身のほかに割り切れる正の整数を持たない数です。2、3、5、7、11 などが素数で、1 は素数ではありません。

Q 個の質問が与えられます。i 番目の質問は 1 つの整数 n_i で、「1 以上 n_i 以下の整数のうち、素数はいくつあるか」を表します。質問のそれぞれに、答えを 1 行ずつ出力してください。

入力の形式

Q
n_1
n_2
...
n_Q

1 行目に質問の数 Q、2 行目から Q 行に、1 行に 1 つずつ n_i が並びます。

出力の形式

Q 行を出力します。i 行目に、n_i 以下の素数の個数を書きます。

制約

  • Q は、1 以上 100000 以下の整数です
  • n_i は、1 以上 2000000 以下の整数です
  • 同じ n_i が何度出てくることもあります

入力と出力の例

例 1

10 以下の素数は 2、3、5、7 の 4 個です。2 以下なら 2 だけで 1 個、20 以下なら 11、13、17、19 も加わって 8 個です。

入力

3
10
2
20

出力

4
1
8

例 2

1 は素数ではないので、1 以下の素数は 0 個です。

入力

2
1
100

出力

0
25

ヒント

まだ開いていません

付箋は 3 枚。下の段ほど答えに近づきます

  1. ヒント 2

  2. ヒント 3答えに近い

main.py
import sys

data = sys.stdin.read().split()
q = int(data[0])
queries = list(map(int, data[1:1 + q]))

# ここから書く

入力

出力

「実行する」を押すと、ここに出力が出ます

できているか「提出して採点」を押すと、隠れたテストを全部走らせて、通ったかをここに出します