본문 바로가기

카테고리 없음

(정수론/파이썬) 쌍둥이 소수 추측 확인

# '친절한 수론 길라잡이' 96쪽
# 쌍둥이 소수 추측: Twin Primes Conjecture
# " P + 2도 소수가 되는 소수 p가 무한히 많이 존재한다."
# 소수의 목록은 매우 불규칙하고, 인접한 두 소수의 차이가 매우 큰 경우도 종종 발생한다. 예를 들어,
# 소수 370,261과 그 다음 소수 사이에는 111개의 합성수가 존재한다.

# 해당 숫자가 소수인지 판정하는 함수
def isPrime(num):
  root_val = round(num ** 0.5) # 제곱근 값을 구한다
  for i in range(2, root_val+1): # 제곱근값+1 까지만 약수를 조사해도 충분하다
    if num % i == 0:  # 중간에 나눠지면 소수가 아니다
      return False
  return True   # 끝까지 나눠지지 않을 경우, 소수로 판정하고 리턴한다.


MAX_NUM = 200
prev_prime = 0 # 소수 표시
count = 0
# 홀수에 대해서만 조사. 계산의 편의성을 위해 일단 쌍둥이소수 (2,3)은 제외
for i in range(3, MAX_NUM, 2):
  is_prime = isPrime(i)
  if is_prime and prev_prime:  # i가 소수이고, 이전 숫자가 소수라면, 찾았다!
    count += 1
    print(f"({prev_prime}, {i})     {count}")
    prev_prime = i
  elif is_prime:
    prev_prime = i
  else:    # 합성수라면
    prev_prime = 0     # 합성수 표시

결과:

(3, 5)     1
(5, 7)     2
(11, 13)     3
(17, 19)     4
(29, 31)     5
(41, 43)     6
(59, 61)     7
(71, 73)     8
(101, 103)     9
(107, 109)     10
(137, 139)     11
(149, 151)     12
(179, 181)     13
(191, 193)     14
(197, 199)     15