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

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
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 개념
        • 정보처리기사 필기
        • 정보처리기사 실기 기출
        • 네트워크관리사 2급
        • SQLD
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • 웹
      • git & github
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바