๋ฌธ์
M์ด์ N์ดํ์ ์์๋ฅผ ๋ชจ๋ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ฐ์ M๊ณผ N์ด ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. (1 โค M โค N โค 1,000,000) M์ด์ N์ดํ์ ์์๊ฐ ํ๋ ์ด์ ์๋ ์ ๋ ฅ๋ง ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
ํ ์ค์ ํ๋์ฉ, ์ฆ๊ฐํ๋ ์์๋๋ก ์์๋ฅผ ์ถ๋ ฅํ๋ค.
์๊ฐ ์ ํ | ๋ฉ๋ชจ๋ฆฌ ์ ํ | ์ ์ถ | ์ ๋ต | ๋งํ ์ฌ๋ | ์ ๋ต ๋น์จ |
---|---|---|---|---|---|
2 ์ด | 256 MB | 255621 | 74495 | 52354 | 27.211% |
https://www.acmicpc.net/problem/1929
ํ์ด
์๊ณ ๋ฆฌ์ฆ
์ด ๋ฌธ์ ๋ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ ๋ฌธ์ ์ ์ ๊ทผํด์ผํ๋ค. ์์๋ฅผ ๊ตฌํ๋ ๋ค์ํ ๋ฐฉ๋ฒ์ด ์์ง๋ง ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๊ฐ ๊ฐ์ฅ ๋์ค์ ์ด๊ณ ์๊ณ ๋ฆฌ์ฆ ํจ์จ์ด ๋งค์ฐ ์ข์ ๋ฐฉ๋ฒ์ด๋ค.
์ผ๋จ ์์๊ฐ ๋ฌด์์ธ์ง ์์๋ณด์.
์์ (Prime Number)
์์์ ์ ์๋ 1๋ณด๋ค ํฐ ์์ฐ์ ์ค 1 ๊ณผ ๊ทธ ์ ์๊ธฐ ์์ ๋ง์ ์ฝ์๋ก ๊ฐ๋ ์์ฐ์๋ฅผ ์๋ฏธ
๊ทธ๋ผ ์๋ผํ ์คํ ๋ค์ค์ ์ฒด๋ฅผ ์ด์ฉํ์ฌ ์์๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
์์๋ฅผ ๊ตฌํ๋ ๋ํ์ ์ธ ๋ฐฉ๋ฒ ์ค ํ๋๋ค.
" k=2 ๋ถํฐ โN ์ดํ๊น์ง ๋ฐ๋ณตํ์ฌ ์์ฐ์๋ค ์ค k๋ฅผ ์ ์ธํ k์ ๋ฐฐ์๋ค์ ์ ์ธ์ํจ๋ค"
์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
- k = 2 ์ด๋ฉด 2 ๋ฅผ ์ ์ธํ 2์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์์ค๋ค.
- k = 3 ์ด๋ฉด 3 ์ ์ ์ธํ 3์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์์ค๋ค.
- (4๋ ์ด๋ฏธ k = 2 ์์ ์ ์ธ๋์ด ๋์ด๊ฐ๋ค.)
- k = 5 ์ด๋ฉด 5 ๋ฅผ ์ ์ธํ 5์ ๋ฐฐ์๋ฅผ ๋ชจ๋ ์ง์์ค๋ค.
- ์ด๋ ๊ฒ ํ์ฌ k = โN ๊น์ง ๋ฐ๋ณตํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ฌ๊ธฐ์ โN ์ดํ๊น์ง๋ง ๋ฐ๋ณตํ๋ฉด ๋๋ ์ด์ ๋ ๋ญ๊น?
์์๋ฅผ ํ๋ณํ ๋ค๋ ๊ฒ์ ๊ฒฐ๊ตญ์ 1๊ณผ ์๊ธฐ ์์ ์ ์ ์ธํ ๋ค๋ฅธ ์์ฐ์๋ฅผ ์ฝ์๋ก ๊ฐ์ง๋ฉด ์๋๋ค๋ ์๋ฏธ์ด๋ค.
์์์ ์์ฐ์ ๐ (๐ > 0) ์ด ์๋ค๊ณ ๊ฐ์ ํ์.
๐ ร ๐ = ๐ ์ ๋ง์กฑํ ๋ ์๋์ ๊ฐ์ ๋ถ๋ฑ์์ ์์ฑํ ์ ์๋ค.
( 1 โค ๐ , ๐ โค ๐ )
๊ทธ๋ฆฌ๊ณ ๐ ์ ๐ ์ค ํ๋๋ โN ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์๋ก๋ค์ด ๐ = 12 ๋ผ๊ณ ํ์.
๊ทธ๋ฌ๋ฉด ์๋์ ๊ฐ์ด ๋ ์์ ๊ณฑ์ผ๋ก ํํํ ์ ์๋ค.
1 ร 12
2 ร 6
3 ร 4
4 ร 3
6 ร 2
12 ร 1
์ฌ๊ธฐ์ ๋ณผ ์ ์๋ฏ์ด ๋ง์ฝ ๐ ๊ฐ ์ฆ๊ฐํ๋ค๋ฉด ์์ฐ์ค๋ ๐ ๊ฐ ๊ฐ์ํ๊ณ ,
๋ฐ๋๋ก ๐ ๊ฐ ๊ฐ์ํ๋ค๋ฉด ์์ฐ์ค๋ ๐ ๊ฐ ์ฆ๊ฐํ๋ค.
๊ทธ๋ฆฌ๊ณ ๐ ์ ๐ ๋ ๐์ ์ฝ์์ด๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๐ ์ ์์์ ์๋ก ๋๋๊ฒ ๋๋ฉด ์์์ ์๊ฐ โN ๋ณด๋ค ์๋ค๋ฉด ๊ฒฐ๊ตญ ๋๋จธ์ง๋ โN ๋ณด๋ค ํด ์ ๋ฐ์ ์๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก ๐ ์ ๐ ์ค ํ๋๋ ๋ฐ๋์ โN ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
์ฆ, โN ์ดํ์ ์์ฐ์ ์ค์ ๋๋์ด ๋จ์ด์ง๋ ์๊ฐ ์๋ค๋ฉด ์ด๋ 1 ๊ณผ N ์ ์ ์ธํ ๋ค๋ฅธ ์์ฐ์๊ฐ N ์ ์ฝ์๋ผ๋ ์๋ฏธ์ด๋ฏ๋ก ์์๊ฐ ์๋๊ฒ ๋๋ ๊ฒ์ด๋ค.
์ฝ๋
์ฒซ๋ฒ์งธ์๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class ์์๊ตฌํ๊ธฐ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
for(int i=m; i<=n; i++){
for(int j=2; j<=i; j++){
if(j == i) { //์๊ธฐ์์ ๊น์ง์์ ๋๋ ์ง๋ฉด ์ถ๋ ฅํ๊ณ ๋ค์์ซ์๋ก
System.out.println(j);
break;
}
else if (i % j != 0) { //๋๋ ์ 0์ด ์๋๋ฉด ๊ณ์์งํ
continue;
}else break; //์๊ธฐ์์ ์ด์ธ์ ๊ฒ์ผ๋ก ๋๋ ์ง๋ฉด ์ถ๋ ฅํ์ง์๊ณ ์ข
๋ฃํจ
}
}
br.close();
}
}
์ด๋ฐฉ๋ฒ์ผ๋ก ๋ ์คํจํ์๋ค.. ์๊ฐ์ด๊ณผ๊ฐ ๋จ๋๋ฐ for๋ฌธ์ 2๋ฒ ์ฌ์ฉํ๊ฒ์ด ๋ฌธ์ ์๋ค.
2๋ฒ์งธ ์๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class ์์๊ตฌํ๊ธฐ {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
StringBuilder sb = new StringBuilder();
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
//์์์ธ์ง ์๋์ง ํ๋จํ์ฌ ์ ์ฅํ๋ค. ๋ฐฐ์ด์์ฑ์ ๋ํดํธ๋ false๋ค.
boolean[] prime = new boolean[n + 1];
for (int i = 2; i <= n; i++) {
if (prime[i]) continue; //์์๋ฐฐ์ด์ด ์ฐธ์ผ๋ ๋์ด๊ฐ๋ค.
if (i >= m) sb.append(i).append("\n"); //i๊ฐ m๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ผ๋ฉด i๋ฅผ ์ถ๋ ฅ๊ฐ์ ๋ฃ์ด์ค๋ค.
//true : ์์์๋ , false : ์์
for (int j = i + i; j <= n; j += i) {
prime[j] = true; //์กฐ๊ฑด์ ๋ง์ผ๋ฉด true๋ก ๋ณ๊ฒฝํด์ค๋ค.
}
}
System.out.println(sb);
br.close();
}
}
์ฑ๊ณต!
๋ต์ง๋ฅผ ๋ณด๊ณ ๋ฌธ์ ๋ฅผ ์์ฑํ์๋ค. ํ์ง๋ง for๋ฌธ์ด ์ค๋ณต๋๋ ๋ถ๋ถ์ ์ดํดํ ์๊ฐ ์์ด์ ์ข๋ ์ฐพ์๋ด์ผ๋ ๊ฒ๊ฐ๋ค. ๊ทธ๋์ ์๊ฐํด๋ธ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
3๋ฒ์งธ ์๋
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class ์์๊ตฌํ๊ธฐ {
public static boolean[] prime;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
StringBuilder sb = new StringBuilder();
int m = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
//์์์ธ์ง ์๋์ง ํ๋จํ์ฌ ์ ์ฅํ๋ค. ๋ฐฐ์ด์์ฑ์ ๋ํดํธ๋ false๋ค.
prime = new boolean[n + 1];
getPrime();
for (int i=m; i<=n; i++){
if(!prime[i]) System.out.println(i);
}
br.close();
}
private static void getPrime() {
//true : ์์ ์๋, false : ์์
prime[0] = prime[1] = true;
for (int i=2; i<= Math.sqrt(prime.length); i++){
if(prime[i]) continue;
for(int j= i*i; j<prime.length; j+=i){
prime[j] = true;
}
}
}
}