[백준 9020][파이썬] 골드바흐의 추측 소수 판별 (에라토스테네스의 체)

2023. 1. 26. 12:00·백준 알고리즘
728x90

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

 

9020번: 골드바흐의 추측

1보다 큰 자연수 중에서  1과 자기 자신을 제외한 약수가 없는 자연수를 소수라고 한다. 예를 들어, 5는 1과 5를 제외한 약수가 없기 때문에 소수이다. 하지만, 6은 6 = 2 × 3 이기 때문에 소수가 아

www.acmicpc.net

알고리즘 문제에서 소수 판별을 할 때 사용하는 알고리즘은 일반적으로 두 종류가 있다.

 

반복문으로 나누어 떨어지는 수가 없는지 확인하는 방법과

 

에라토스테네스의 체를 사용하는 방법이 있다.

https://blog.naver.com/growth_s/222745036373

 

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

소수란 약수가 1과 자기 자신뿐인 수를 말한다. 그러면 소수인지 아닌지 어떻게 판단할 수 있을까? 일반적...

blog.naver.com

 

이 문제에서는 파이썬으로 에라토스테네스의 체를 구현해보려한다.

 

1부터 10000까지 소수를 판별해야한다면 길이가 10001이고 모든 값이 True인 리스트를 만든다.

 

그리고 인덱스를 2부터 하나씩 증가해가며 배수에 해당하는 인덱스의 값을 False로 바꾼다.

 

prime = [True]*10001
prime[0:2]=[False,False]
for i in range(2, 10001):
    for j in range(i+i, 10001, i):
        prime[j]=False

이제 n이 소수인지 알고 싶다면 prime[n]의 값을 보면 된다.

 

prime[n]이 True라면 소수이고 False라면 소수가 아니다.

 

본격적으로 문제를 풀어보자면 특정 정수의 값을 두 소수의 합으로 표현해야한다.

 

이 경우의 수는 여러가지가 나올 수 있는데 그럴 경우 두 소수의 차이가 가장 작은 것을 선택한다.

 

무조건 짝수가 입력값으로 들어오니까 들어온 값을 2로 나눈 값부터 시작한다.

 

그리고 차이를 점점 벌려나가면서 가장 먼저 소수 두 개가 나오는 값이 곧 정답이 된다.

 

<전체 코드>

prime = [True]*10001
prime[0:2]=[False,False]
for i in range(2, 10001):
    for j in range(i+i, 10001, i):
        prime[j]=False
t=int(input())
for _ in range(t):
    n=int(input())
    for i in range(n//2, 10000):
        if prime[n-i] and prime[i]: #둘 다 소수라면
            print(n-i, i)
            break
728x90

'백준 알고리즘' 카테고리의 다른 글

[백준 2231][파이썬] 분해 합  (0) 2023.02.09
[백준 25682][파이썬] 체스판 다시 칠하기  (0) 2023.01.28
[백준 2563][파이썬] 색종이. 이차원 배열  (0) 2023.01.25
[백준 10828][파이썬] 파이썬 스택 사용법  (0) 2023.01.21
[백준 1065][파이썬] 한수  (0) 2023.01.16
'백준 알고리즘' 카테고리의 다른 글
  • [백준 2231][파이썬] 분해 합
  • [백준 25682][파이썬] 체스판 다시 칠하기
  • [백준 2563][파이썬] 색종이. 이차원 배열
  • [백준 10828][파이썬] 파이썬 스택 사용법
웅대
웅대
알고리즘과 백엔드를 중심으로 열심히 공부 중입니다! 같이 소통하며 공부해요!
    250x250
  • 웅대
    웅대 개발 블로그
    웅대
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 백준 알고리즘
        • dp
        • 문자열
        • 정렬
        • 스택
        • 브루트 포스
        • 이진 탐색
        • 정리
        • 우선순위 큐
        • 자료구조
        • 그래프
        • 기타
        • 그리디
      • 컴퓨터 언어
        • Kotlin
        • Python
        • C#
      • 공부
        • Database
        • Android Studio
        • Algorithm
        • 컴퓨터 구조론
        • Spring
        • lombok
        • AWS
        • Network
        • OS
        • Git & GitHub
        • AI
        • Computer Vision
        • 보안
        • Nginx
        • 프론트
        • express
        • GCP
        • grokking concurrency
        • DevOps
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    스프링 OAuth2
    파이썬
    nn.RNN
    다익스트라
    codetree
    bfs
    code tree
    Merge
    binary search
    ChatPromptTemplate
    embedding
    AWS Lambda
    ci/cd
    푸쉬 알람
    parametric search
    Vector Store
    openvidu 배포
    RNN
    influxDB CLI
    스택
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
웅대
[백준 9020][파이썬] 골드바흐의 추측 소수 판별 (에라토스테네스의 체)
상단으로

티스토리툴바