number_theory / knowledge

골드바흐 파티션의 개수 세어보기

paul 2025.10.28 305words (1m)

2보다 큰 모든 짝수는 두 소수의 합으로 쓸 수 있다는 것이 골드바흐 추측이다. 참인지는 아직 모른다.

쓸 수 있느냐가 아니라 몇 가지 방법으로 쓸 수 있느냐를 세어봤다.

python
def goldbach(n):
    ans[n] = []
    for i in range(2, n//2 + 1):
        if check_prime(i) and check_prime(n - i):
            ans[n].append((i, n - i))

for i in range(4, domain + 2, 2):
    goldbach(i)

in // 2 까지만 돌린다. (3, 7)(7, 3) 은 같은 것이므로 절반만 보면 된다. 여기를 n 까지 돌리면 개수가 정확히 두 배가 되고 홀수 중앙점만 한 번 세어진다.

check_prime 은 앞서 소수 분포를 볼 때 쓰던 것과 같은 함수다. 2부터 n 직전까지 나눠보는 방식이라 여기서도 그대로 느리다.

결과

가로가 짝수, 세로가 그 수를 두 소수의 합으로 쓰는 방법의 수다.

짝수별 골드바흐 파티션 개수

먼저 눈에 들어오는 건 0인 점이 하나도 없다는 것이다. 검사한 범위 안에서는 반례가 없다. 물론 이건 추측이 참이라는 증명이 아니라 범위 안에서 확인했다는 것뿐이다.

위로 벌어지는 모양

점들이 하나의 곡선이 아니라 위쪽으로 벌어지는 부채꼴을 이룬다. 그 안에서도 몇 개의 띠로 갈라진다.

같은 크기의 짝수인데 어떤 것은 방법이 100가지고 어떤 것은 200가지다. 3의 배수인 짝수가 위쪽 띠에 몰린다. n 이 3의 배수면 in - i 가 둘 다 3의 배수가 되는 경우가 없어서 후보가 덜 걸러지기 때문이다. 5의 배수도 비슷하게 한 겹을 만든다.

수를 하나씩 볼 때는 안 보이고 전부 찍어놓으니 드러나는 구조다.

그림과 코드의 범위가 다르다

저장된 그림은 가로가 10000까지 가는데 지금 코드의 domain 은 5000이다. 그림을 만든 뒤에 범위를 줄여놓은 것으로 보인다.

ax.set_xlim(0, domain) 으로 축을 잡고 있으니 지금 코드로 다시 돌리면 절반짜리 그림이 나온다.

그리는 부분에도 어긋난 곳이 있다.

python
for k, v in ans.items():
    ax.scatter(xl, yl, s=20, c='black')

ans 의 항목 수만큼 반복하는데 안에서는 매번 전체를 다시 그린다. kv 를 쓰지 않는다. 반복문 없이 ax.scatter(xl, yl) 한 줄이면 같은 그림이다.