λ¬Έμ
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;
}
}
}
}