๋ฌธ์
๋ฒ ๋ฅดํธ๋ ๊ณต์ค์ ์์์ ์์ฐ์ n์ ๋ํ์ฌ, n๋ณด๋ค ํฌ๊ณ , 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ ์ ์ด๋ ํ๋ ์กด์ฌํ๋ค๋ ๋ด์ฉ์ ๋ด๊ณ ์๋ค.
์ด ๋ช ์ ๋ ์กฐ์ ํ ๋ฒ ๋ฅดํธ๋์ด 1845๋ ์ ์ถ์ธกํ๊ณ , ํํ๋ํฐ ์ฒด๋น์ผํ๊ฐ 1850๋ ์ ์ฆ๋ช ํ๋ค.
์๋ฅผ ๋ค์ด, 10๋ณด๋ค ํฌ๊ณ , 20๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ 4๊ฐ๊ฐ ์๋ค. (11, 13, 17, 19) ๋, 14๋ณด๋ค ํฌ๊ณ , 28๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์๋ 3๊ฐ๊ฐ ์๋ค. (17,19, 23)
์์ฐ์ n์ด ์ฃผ์ด์ก์ ๋, n๋ณด๋ค ํฌ๊ณ , 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ ๋ ฅ์ ์ฌ๋ฌ ๊ฐ์ ํ ์คํธ ์ผ์ด์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ฐ ์ผ์ด์ค๋ n์ ํฌํจํ๋ ํ ์ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
์ ๋ ฅ์ ๋ง์ง๋ง์๋ 0์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
๊ฐ ํ ์คํธ ์ผ์ด์ค์ ๋ํด์, n๋ณด๋ค ํฌ๊ณ , 2n๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์์ ๊ฐ์๋ฅผ ์ถ๋ ฅํ๋ค.
์ ํ
1 ≤ n ≤ 123,456
์์ ์ ๋ ฅ 1
1
10
13
100
1000
10000
100000
0
์์ ์ถ๋ ฅ 1
1
4
3
21
135
1033
8392
ํ์ด
1. ์ซ์ n ์ ์ ๋ ฅ๋ฐ์ m์ 2n์ ๋์ ํ๊ณ , m+1 ํฌ๊ธฐ์ ๋ฐฐ์ด์ ์์ฑํ๋ค. n์ด 0์ผ๋ ๋ฌดํ๋ฃจํ๋ฅผ ํ์ถํ๋ค.
2. ์๋ผํ ์คํ ๋ค์ค์ ์ฒด์ ๋ฐ๋ผ < 2๋ถํฐ ๋ฃจํธn +1์ ๋ฒ๋ฆผ์์ธ sqrt >์ ๋ฐฐ์์ (๋ฐฐ์๋ ์์๊ฐ ์๋๋ฏ๋ก) i๊ฐ j๋ ๊ฐ์ง ์์๋ (์ฒซ๋ฒ์งธ ์๋ ๋จ๊ฒจ๋๊ธฐ ์ํด) -1์ ๋์
3. m๊ณผ n ์ฌ์ด์ ๋ฐฐ์ด์์ -1์ด ์๋๋๋ง count++, ์ต์ข count๋ฅผ ๋ฒํผ๋ก ์ถ๋ ฅ
4. ๋ฌดํ๋ฃจํ๋ฅผ ํ์ถํ๋ฉด ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅํ๋ค.
import java.io.*;
import java.util.Scanner;
public class B4948 {
public static void main(String[] args) throws IOException {
Scanner sc = new Scanner(System.in);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int n = 1;
while(true) {
n = sc.nextInt();
if(n == 0) {
break;
}
int m = 2 * n;
int count = 0;
int sqrt = (int)(Math.sqrt(m) + 1);
int[] prime = new int[m+1];
for(int i = 2; i <= sqrt; i++) {
for(int j = i; j <= m; j+=i) {
if (prime[j] == 0 && j != i) {
prime[j] = -1;
}
}
}
for(int i = n+1; i < prime.length; i++) {
if(i != 1 && prime[i] != -1) {
count++;
}
}
bw.write(count + "\n");
}
bw.flush();
}
}