에라토스테네스의 체(소수, 약수 구하기)

2024. 7. 26. 10:38·Java & Spring/알고리즘

◇ 알고리즘 정의

고대 그리스의 수학자 에라토스테네스가 만들어 낸 소수를 찾는 방법.

이 방법은 마치 체로 치듯이 수를 걸러낸다고 하여 '에라토스테네스의 체'라고 부른다. 

 

◇ 알고리즘 동장방식

출처 : https://namu.wiki/w/%EC%97%90%EB%9D%BC%ED%86%A0%EC%8A%A4%ED%85%8C%EB%84%A4%EC%8A%A4%EC%9D%98%20%EC%B2%B4

 

에라토스테네스의 체

Sieve of Eratosthenes 고대 그리스의 수학자 에라토스테네스 가 만들어 낸 소수 를 찾는 방법.

namu.wiki

 

◇ 알고리즘 구현

public class Main {
    public static void main(String[] args) {
    	int number = 9;
        int[] factors = new int[number + 1];

        // 에라토스테네스의 체 변형을 사용하여 약수의 개수 계산
        for (int i = 1; i <= number; i++) {
            for (int j = i; j <= number; j += i) {
                factors[j]++;
            }
        }

9까지의 for문 루프를 나타내보면

 

  • i = 1:
    • j는 1부터 9까지 1씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
  • i = 2:
    • j는 2부터 9까지 2씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 1, 2, 1, 2, 1, 2, 1]
  • i = 3:
    • j는 3부터 9까지 3씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 2, 1, 2, 1, 2, 2]
  • i = 4:
    • j는 4부터 8까지 4씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 3, 1, 2, 1, 3, 2]
  • i = 5:
    • j는 5부터 5까지 5씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 3, 2, 2, 1, 3, 2]
  • i = 6:
    • j는 6부터 6까지 6씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 3, 2, 3, 1, 3, 2]
  • i = 7:
    • j는 7부터 7까지 7씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 3, 2, 3, 2, 3, 2]
  • i = 8:
    • j는 8부터 8까지 8씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 3, 2, 3, 2, 4, 2]
  • i = 9:
    • j는 9부터 9까지 9씩 증가하며 factors[j] 값을 증가시킵니다.
    • factors = [0, 1, 2, 2, 3, 2, 3, 2, 4, 3]

다음과 같다.

수 i의 배수를 인덱스로 갖는 배열 arr[j]의 값을 1씩 증가시키는 개념이다.

 

'Java & Spring > 알고리즘' 카테고리의 다른 글

다익스트라(Dijkstra) - 최단경로 찾기  (0) 2025.03.24
그래프탐색 - DFS와 BFS  (0) 2024.12.23
투 포인터(Two Pointer) 알고리즘(세 수의 합 구하기)  (0) 2024.07.25
유클리드 호제법(최대공약수 구하기)  (0) 2024.07.18
'Java & Spring/알고리즘' 카테고리의 다른 글
  • 다익스트라(Dijkstra) - 최단경로 찾기
  • 그래프탐색 - DFS와 BFS
  • 투 포인터(Two Pointer) 알고리즘(세 수의 합 구하기)
  • 유클리드 호제법(최대공약수 구하기)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부 N
        • 정보처리기사 N
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java this
    java enhance switch
    java기초
    java super
    java 세수의합
    프로그래머스 java 기초 트레이닝
    java 제어자
    데이터 타입
    java
    프로그래머스 java 기초트레이닝
    java two-pointer
    개발로드맵
    java 메서드
    자료구조
    java arrays.copyofrnage()
    java 유클리드 호제법
    java 에라토스테네스의 체
    데이터 크기
    java 멤버
    Java 생성자
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
에라토스테네스의 체(소수, 약수 구하기)
상단으로

티스토리툴바