* μ΄λ€ μ Cμ λν΄ μμμΈμ§ μλμ§ νλ¨νλ λ° κ±Έλ¦¬λ μκ°: O(λ£¨νΈ C)
* 2 ~ (λ£¨νΈ C)κΉμ§λ§ νμΈνλ©΄ λκΈ° λλ¬Έ
* κ·Έλ λ€λ©΄ 1 ~ 1,000,000κΉμ§μ λͺ¨λ μμλ₯Ό ꡬνλ λ° κ±Έλ¦¬λ μκ°?
* μ΄ Nκ°μ μ * κ°κ° μμμΈμ§ νλ¨νλ μκ°λ³΅μ‘λ
* = N * O(루νΈN) = O(N루νΈN)
* μ¦, 1,000,000 * 1,000 = 10μ΅ = 10sec
* 'μλΌν μ€ν
λ€μ€μ 체'μ κ°λ
1. 2λΆν° NκΉμ§μ λͺ¨λ μλ₯Ό μ λλ€.
2. μμ§ μ§μμ§μ§ μμ μ μ€μμ κ°μ₯ μμ μλ₯Ό μ°Ύλλ€.
3. κ·Έ μλ₯Ό μ§μ°κ³ μμλ‘ μ μ₯νλ€.
4. κ·Έ μμ λ°°μλ₯Ό μ§μ΄λ€.
* μλ₯Ό λ€μ΄, 1~100 κΉμ§μ μμμ λͺ¨λ μμλ₯Ό ꡬν΄λ³΄μ
* 2, 3, 5, 7μ μμλ‘ μμ λ°©λ²μ μ μ©νλ©΄
* 11λΆν°λ 11*11 = 121(100μ΄κ³Ό)μ΄κΈ° λλ¬Έμ λ μ΄μ μνν νμκ° μλ€.
// 'μλΌν μ€ν
λ€μ€μ 체'λ₯Ό μ΄μ©ν start ~ end λ²μμ μμμμ μμ ꡬνκΈ°
Scanner s = new Scanner(System.in);
int start = s.nextInt();
int end = s.nextInt();
ArrayList<Integer> primeList = new ArrayList<>();
boolean[] checkPrime = new boolean[n + 1]; // true : μ§μμ§, false : μ§μμ§μ§ μμ
for (int i = 2; i <= end; i++) {
// μ§μμ§μ§ μμ μλ μμ
if (!checkPrime[i]) {
primeList.add(i); // 2~end κΉμ§μ μμ μ μ₯
// iκ° 1,000,000 μΈ κ²½μ° i*iλ λ²μλ₯Ό λμ΄κ°λ―λ‘ j=i*i -> j=i*2
// for (int j = i * i; j <= n; j += i){
for (int j = i * 2; j <= end; j += i) {
checkPrime[j] = true; // μ§μμ§μ§ μμ μμ λ°°μλ€μ μ§μ΄λ€
}
}
}
* μμΈμλΆν΄: μ μ Nμ μμμ κ³±μΌλ‘ λΆν΄νλ κ²
* κ°λ¨ν νμ΄λ²
* μμλ₯Ό ꡬν νμ μμ΄
* 2~루νΈnum κΉμ§μ μλ₯Ό μμλλ‘ λ°λ³΅ν΄μ
* Nλ₯Ό λλ μ μμ λκΉμ§ κ³μν΄μ λλλ€.