Grupowanie liczb naturalnych w pary liczb względnie pierwszych
Podział ciągu {1, 2, 3, ..., n} na n/2 grup, w których wszystkie liczby są względnie pierwsze, osiąga się za pomocą prostego algorytmu. Liczby pierwsze i 1 umieszcza się w pierwszej grupie. Liczby parzyste >2 tworzą elementy startowe pozostałych grup. Nieparzyste liczby złożone rozkłada się według wzoru pos_{x_i} = ⌊x_i/4 + 0,5⌋. Zapewnia to gcd każdej liczby nieparzystej z parzystym liderem grupy równe 1.
Logika rozkładu
Algorytm opiera się na właściwościach nieparzystych liczb złożonych: wszystkie mają postać 4k ± 1 dla pewnego k. Tutaj k odpowiada numerowi grupy. Dla parzystego lidera grupy 2k zachodzi gcd(2k, 4k ± 1) = 1, ponieważ 4k ± 1 ≡ ±1 (mod 2k).
Pierwsza grupa zawiera:
- 1
- Wszystkie liczby pierwsze
Pozostałe grupy (k ≥ 2):
- Pierwsza pozycja: liczba parzysta 2k
- Druga pozycja (opcjonalnie): nieparzyste liczby złożone x, gdzie pos_x = k
Niektóre grupy mogą zawierać 0 lub 2 liczby nieparzyste (przykłady: k=3,7 — puste; k=14,16 — po dwie).
Przykład dla n=24
Tabela pokazuje rozkład:
| Grupa 1 | 1, 2, 3, 5, 7, 11, 13, 17, 19, 23 |
| Grupa 2 | 4, 9, 15, 21 |
| Grupa 3 | 6 |
| Grupa 4 | 8, 25? (dla n=24: 8) |
| ... | ... |
Sprawdzenie względnej pierwszości wewnątrz grup potwierdza właściwości: liczby pierwsze są parami względnie pierwsze, gcd(2k, 4k±1)=1.
Uzasadnienie matematyczne
- Liczby pierwsze: Dowolne dwie liczby pierwsze p, q (p ≠ q) mają gcd(p,q)=1.
- Parzysti liderzy: 2k z k≥2 jest nieparzyste, ale 2k jest parzyste.
- Nieparzyste złożone: x = 4k ±1, gcd(2k, x) = gcd(2k, ±1 mod 2k) =1.
- Między nieparzystymi w grupie: Możliwe pary (rzadko) też są względnie pierwsze przez konstrukcję, ponieważ rozkładają się modulo.
Wynika to pośrednio z twierdzenia Dirichleta o liczbach pierwszych w postępach arytmetycznych, ale bezpośrednio — z postaci liczb nieparzystych.
Implementacja w Pythonie
Do automatyzacji podziału:
def group_naturals(n):
primes = [1] # 1 + liczby pierwsze
composites_odd = []
evens = []
for i in range(2, n+1):
if i % 2 == 0:
evens.append(i)
elif is_prime(i):
primes.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] # przycinamy nadmiarowe
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
Kod generuje grupy dla danego n, sprawdzając właściwości.
Co jest ważne
- Wszystkie grupy zawierają tylko liczby względnie pierwsze.
- Liczba grup to dokładnie n/2 dla dowolnego naturalnego n.
- Nieparzyste liczby złożone rozkładają się według pos = ⌊x/4 + 0,5⌋.
- Uzasadnienie: x=4k±1 ⇒ gcd(2k, x)=1.
- Pierwsza grupa — 1 i wszystkie liczby pierwsze.
— Editorial Team
Brak komentarzy.