홈으로 돌아가기

n/2 쌍별 서로소 그룹으로 자연수 그룹화

이 기사는 자연수 1..n을 내부 요소가 쌍별 서로소인 n/2 그룹으로 나누는 알고리즘을 설명합니다. 홀수 합성수 공식과 4k±1 속성을 사용합니다. Python 코드와 정당화 제공.

숫자 1..n을 쌍별 서로소 쌍으로 그룹화하는 방법
Advertisement 728x90

자연수를 서로소 쌍으로 그룹화하기

수열 {1, 2, 3, ..., n}을 n/2개의 그룹으로 나누어 각 그룹 내 모든 숫자가 서로소가 되도록 하는 것은 간단한 알고리즘으로 가능합니다. 소수와 1은 첫 번째 그룹에 배치됩니다. 2보다 큰 짝수는 나머지 그룹의 시작 요소를 형성합니다. 홀수 합성수는 공식 pos_{x_i} = ⌊x_i/4 + 0.5⌋를 사용하여 분배됩니다. 이를 통해 각 홀수와 짝수 그룹 리더의 최대공약수가 1이 됩니다.

분배 논리

이 알고리즘은 홀수 합성수의 성질에 의존합니다: 모든 홀수 합성수는 어떤 k에 대해 4k ± 1 형태를 가집니다. 여기서 k는 그룹 번호에 해당합니다. 짝수 그룹 리더 2k에 대해, gcd(2k, 4k ± 1) = 1입니다. 왜냐하면 4k ± 1 ≡ ±1 (mod 2k)이기 때문입니다.

첫 번째 그룹에는 다음이 포함됩니다:

Google AdInline article slot
  • 1
  • 모든 소수

나머지 그룹 (k ≥ 2):

  • 첫 번째 위치: 짝수 2k
  • 두 번째 위치 (선택적): pos_x = k인 홀수 합성수 x

일부 그룹은 0개 또는 2개의 홀수를 포함할 수 있습니다 (예: k=3,7 — 비어 있음; k=14,16 — 각각 두 개).

n=24 예시

분배를 보여주는 표:

Google AdInline article slot

| 그룹 1 | 1, 2, 3, 5, 7, 11, 13, 17, 19, 23 |

| 그룹 2 | 4, 9 |

| 그룹 3 | 6 |

Google AdInline article slot

| 그룹 4 | 8, 15 |

| ... | ... |

그룹 내 서로소 여부는 다음 성질로 확인됩니다: 소수는 쌍별로 서로소이며, gcd(2k, 4k±1)=1입니다.

수학적 근거

  • 소수: 임의의 두 소수 p, q (p ≠ q)는 gcd(p,q)=1입니다.
  • 짝수 리더: k≥2인 2k는 짝수입니다.
  • 홀수 합성수: x = 4k ±1, gcd(2k, x) = gcd(2k, ±1 mod 2k) =1.
  • 그룹 내 홀수 간: 가능한 쌍(드물게)도 구성에 의해 서로소입니다. 왜냐하면 모듈로 분배되기 때문입니다.

이는 디리클레의 등차수열 내 소수 정리에서 간접적으로 따르지만, 홀수 형태에서 직접적으로 도출됩니다.

파이썬 구현

분할을 자동화하기 위한 코드:

def group_naturals(n):
    primes = [1]  # 1 + 소수
    composites_odd = []
    evens = []
    
    for i in range(2, n+1):
        if is_prime(i):
            primes.append(i)
        elif i % 2 == 0:
            evens.append(i)
        else:
            composites_odd.append(i)
    
    groups = [primes]
    pos = {}
    for x in composites_odd:
        k = int(x / 4 + 0.5)
        if k not in pos:
            pos[k] = []
        pos[k].append(x)
    
    for k in range(2, n//2 +1):
        group = [2*k]
        if k in pos:
            group.extend(sorted(pos[k]))
        groups.append(group)
    
    return groups[:n//2]  # 초과분 제거

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num**0.5)+1):
        if num % i == 0:
            return False
    return True

이 코드는 주어진 n에 대한 그룹을 생성하며, 성질을 검증합니다.

핵심 포인트

  • 모든 그룹은 서로소 숫자만 포함합니다.
  • 그룹 수는 자연수 n에 대해 정확히 n/2입니다.
  • 홀수 합성수는 pos = ⌊x/4 + 0.5⌋로 분배됩니다.
  • 근거: x=4k±1 ⇒ gcd(2k, x)=1.
  • 첫 번째 그룹: 1과 모든 소수.

— Editorial Team

Advertisement 728x90

다음 읽기