베어_
TechBear
베어_
전체 방문자
오늘
어제
  • 분류 전체보기 (336)
    • Spring (33)
      • 개념 (13)
      • Security (5)
      • 실습 (1)
      • 토비 스프링 (11)
    • JPA (6)
    • 프로젝트 기록 (24)
    • DB (13)
    • JAVA (18)
    • 알고리즘 (50)
      • 유형정리 (8)
      • Baekjoon (21)
      • LeetCode (18)
    • 디자인패턴 (0)
    • 개발서적 (79)
      • Effective Java (78)
      • 객체지향의 사실과 오해 (1)
    • 독후감 (4)
    • 보안 (2)
    • 운영체제(OS) (53)
      • 공룡책 (53)
    • 컴퓨터 네트워크 (28)
      • 컴퓨터 네트워크 하향식 접근 (23)
    • 자료구조 (1)
    • DevOps (2)
    • 앱 개발 (20)
      • 안드로이드 스튜디오 (20)

블로그 메뉴

    공지사항

    인기 글

    태그

    • Spring
    • 자바8
    • 운영체제
    • java
    • 스프링시큐리티
    • leetcode
    • 백준
    • 토비스프링
    • BFS
    • 자바
    • 스프링
    • 코드업
    • 스레드
    • 이펙티브자바
    • jpa
    • 데이터베이스
    • C++
    • dfs
    • 함수형인터페이스
    • 알고리즘

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    베어_

    TechBear

    [알고리즘] 소수 알고리즘
    알고리즘/유형정리

    [알고리즘] 소수 알고리즘

    2022. 5. 11. 10:57

    소수를 구하는 알고리즘을 알아보자.

     

    소수의 정의를 이용한 방법

       N이 소수이면 2 ~ (N-1)로 나누어 떨어지지 않는다. 이 경우 2부터 N-1까지 연산이 필요하기 때문에 O(N)의 시간복잡도가 걸린다.

     

    약수의 특징을 이용한 방법 

       N이 소수가 되려면, 2이상이고, N/2 이하의 자연수로 나누어 떨어지면 안된다. (N의 약수 중에서 가장 큰 것은 N/2보다 작거나 같다)

    여전히 O(N)의 시간 복잡도를 갖는다.

     

    약수의 특징을 이용한 방법2

       모든 수의 약수는 루트 N을 기준으로 대칭을 이룬다. 루트 N의 값 왼쪽에 있는 값을 기준으로 값 들을 조합해 대칭 오른쪽에 있는 수의 값을 구할 수 있다. O(루트 N)의 시간 복잡도를 가진다.

    컴퓨터에서 실수는 근사값을 나타내기 때문에, 루트 N과 같은 경우는 다음 코드와 같이 i * i로 표기하는 것이 좋다.

    public class B1978 {
    
        public static int answer = 0;
    
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
    
            int n = sc.nextInt();
            while(n-- > 0) {
                int num = sc.nextInt();
                if(isPrime(num)) answer++;
            }
    
            System.out.println(answer);
        }
    
        public static boolean isPrime(int n) {
            if(n <= 1) {
                return false;
            }
    
            for(int i = 2; i * i <= n; i++) {
                if(n % i == 0) return false;
            }
            return true;
        }
    }

     

    에라토스테네스의 체

      https://brightmango.tistory.com/283?category=978023#toc-알고리즘%20설명 

     

    [알고리즘] 소수 알고리즘(에스토스테네스 체)

    에스토스테네스 체 -> 소수를 구할 때 사용하는 가장 최적화된 알고리즘이다. 알고리즘 설명  1 ) 먼저 일차원 배열을 하나 만든다.  2 ) Ch[i] == 0이면 ch[i] = 1로 바꾸고 ch[i]의 배수도 모두 1로 바

    brightmango.tistory.com

     

     

    관련 문제

    https://www.acmicpc.net/problem/1929

     

    1929번: 소수 구하기

    첫째 줄에 자연수 M과 N이 빈 칸을 사이에 두고 주어진다. (1 ≤ M ≤ N ≤ 1,000,000) M이상 N이하의 소수가 하나 이상 있는 입력만 주어진다.

    www.acmicpc.net

    https://www.acmicpc.net/problem/1978

     

    1978번: 소수 찾기

    첫 줄에 수의 개수 N이 주어진다. N은 100이하이다. 다음으로 N개의 수가 주어지는데 수는 1,000 이하의 자연수이다.

    www.acmicpc.net

     

      '알고리즘/유형정리' 카테고리의 다른 글
      • [알고리즘] 카데인 알고리즘
      • [알고리즘] 버킷 정렬
      • [알고리즘] 약수 알고리즘
      • [알고리즘] 동전 교환 알고리즘
      베어_
      베어_
      Today I learned | 문제를 해결하는 개발자

      티스토리툴바