자연수 n이 주어졌을 떄 n까지의 자연수에 존재하는 모든 소수를 판별하는 알고리즘
체는 sieve, 즉 조리용 도구로 쓰이는 체를 말하는 거임, 처음에 체가 수학 용어인줄 알고 검색해봤음. 소수가 걸러지는 체라고 생각하면 개념 이해할 때 도움이 될거임
static boolean isPrime(int n) {
if(n <= 1) return false;
if(n <= 3) return true;
for(int i = 2; i * i <= n; i++){
if(n % i == 0) return false;
}
return true;
}
n을 넘지 않는 n의 제곱근까지의 수 중 n이 나눠질 수 있는 지 검사
static void eratosthenes(int n, boolean[] primeList) {
for(int i = 2; i * i <= n; i++) {
if(primeList[i]) {
for(int j = i * i; j <= n; j += i) {
primeList[j] = false;
}
}
}
}
import java.util.*;
import java.io.*;
public class TimeTest {
public static void main(String[] args) throws IOException {
int targetNumber = 100 ;
boolean[] primeList1 = new boolean[targetNumber + 1];
boolean[] primeList2 = new boolean[targetNumber + 1];
Arrays.fill(primeList2, true);
primeList2[0] = false;
primeList2[1] = false;
// custom 소수 판별 알고리즘
long startTime1 = System.nanoTime();
for(int i = 0; i <= targetNumber; i++) {
primeList1[i] = isPrime(i);
}
long endTime1 = System.nanoTime();
double duration1 = (endTime1 - startTime1) / 1_000_000.0;
// Eratosthenes의 체 알고리즘
long startTime2 = System.nanoTime();
eratosthenes(targetNumber, primeList2);
long endTime2 = System.nanoTime();
double duration2 = (endTime2 - startTime2) / 1_000_000.0;
// 결과 출력
System.out.println("Execution time: " + duration1 + " milliseconds");
System.out.println("Execution time: " + duration2 + " milliseconds");
}
static boolean isPrime(int n) {
if(n <= 1) return false;
if(n <= 3) return true;
for(int i = 2; i * i <= n; i++){
if(n % i == 0) return false;
}
return true;
}
static void eratosthenes(int n, boolean[] primeList) {
for(int i = 2; i * i <= n; i++) {
if(primeList[i]) {
for(int j = i * i; j <= n; j += i) {
primeList[j] = false;
}
}
}
}
}


