# '친절한 수론 길라잡이' 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