에라토스테네스의 체


에라토스테네스의 체 (위키)

  - 어떤 수가 소수인지 판별할 수 있는 방법

  - 2의 배수부터 지우고(자기자신 제외) 다음 숫자로 넘어가 3의 배수를 지우고(자기자신 제외)를 반복

  - 지운 숫자에 접근할 경우 다음 숫자로 넘어감

 

public int eratosthenes(int n){
    int[] arr = new int[n - 1]; // 0, 1 제외하고 n은 포함되어야 하니까 -1
    int count = 0;

    for(int i=2; i<=n; i++){
        arr[i - 2] = i;
    }
    
    for(int i=2; i<=n; i++){
        if (arr[i - 2] == 0){
            continue;
        }

        for(int j=i+i; j<=n; j+=i){ // 자기자신 제외 (i + i), 배수만큼 (j + i)
            arr[j - 2] = 0;
        }
    }

    for (int i : arr) {
        if (i != 0){
            count++;
        }
    }

    return count;
}

'0x20. 알고리즘' 카테고리의 다른 글

[JAVA] 최대공약수, 최소공배수 구하기  (0) 2021.09.02
약수의 총 합 구하기  (0) 2021.09.01
두 점 사이의 거리 구하기  (1) 2021.07.13

+ Recent posts