Що вивчає теорія чисел?
Що вивчає теорія чисел?
Коротка відповідь
Теорія чисел - розділ математики про властивості цілих чисел і близьких до них структур: подільність, прості числа та їхній розподіл, арифметику за модулем (конгруенції), розв'язки діофантових рівнянь, а також алгоритми, побудовані на цих ідеях (наприклад, для криптографії).
Розгорнута відповідь
Визначення і предмет галузі
Теорія чисел вивчає натуральні й цілі числа, їх розклад на прості множники, подільність, порівняння за модулем, а також рівняння, у яких розв'язки шукаються в цілих або раціональних числах (діофантові рівняння). Сучасна теорія чисел спирається на інструменти аналізу, алгебри та обчислювальної математики.
Ключові розділи та ідеї
- Подільність і алгоритми.
- НСД, алгоритм Евкліда, лема Безу: для цілих a, b існують x, y такі, що ax + by = gcd(a, b).
- Основна теорема арифметики: будь-яке n > 1 єдиним чином подається у вигляді добутку простих степенів.
- Прості числа та факторизація.
- Тести простоти (Міллера-Рабіна), методи факторизації (ρ-метод Полларда, квадратичне решето).
- Розподіл простих: скільки простих не перевищує x.
- Конгруенції та арифметика за модулем.
- a ≡ b (mod m) означає, що m ділить a − b; можна додавати, множити й підносити до степеня «за модулем».
- Мала теорема Ферма: a^(p−1) ≡ 1 (mod p) при простому p і gcd(a, p)=1. Теорема Ейлера: a^φ(m) ≡ 1 (mod m), якщо gcd(a, m)=1.
- Китайська теорема про остачі: система порівнянь за взаємно простими модулями зводиться до одного порівняння за добутком модулів.
- Діофантові рівняння.
- Лінійні: ax + by = c мають розв'язки в цілих тоді й лише тоді, коли gcd(a, b) ділить c.
- Класичні нелінійні: рівняння Пелля x^2 − Dy^2 = 1, піфагорові трійки, рівняння Морделла й еліптичні криві.
- Аналітична теорія чисел.
- Теорема про розподіл простих: π(x) ~ x / ln x.
- Дзета-функція Рімана та L-функції як інструменти дослідження розподілу простих.
- Алгебраїчна теорія чисел.
- Кільця алгебраїчних цілих, розклад простих у розширеннях числових полів, ідеали та групи класів.
- Обчислювальна теорія чисел і криптографія.
- Практичні алгоритми: швидкі тести простоти, піднесення до степеня за модулем, розширений алгоритм Евкліда, китайська теорема в алгоритмічному вигляді.
- Застосування: RSA, Diffie-Hellman, еліптичні криві, підписи та протоколи.
- Адитивна та комбінаторна теорія чисел.
- Суми множин, теореми типу Шнірельмана-Рота, гіпотези Гольдбаха та Варінга.
Типові приклади задач і тверджень
- Перевірити, чи є число простим; знайти розклад на прості множники для помірно великих чисел.
- Розв'язати порівняння a·x ≡ b (mod m) або систему порівнянь із взаємно простими модулями (КТО).
- Знайти НСД(a, b) і коефіцієнти Безу x, y такі, що ax + by = gcd(a, b).
- Оцінити кількість простих до N і зрозуміти, чому алгоритми криптографії на великих числах працюють.
Практичні приклади в коді (Python)
python
# Базові інструменти теорії чисел для практики
def gcd(a: int, b: int) -> int:
"""Найбільший спільний дільник (алгоритм Евкліда)."""
while b:
a, b = b, a % b
return abs(a)
def extended_gcd(a: int, b: int):
"""Розширений алгоритм Евкліда: повертає (g, x, y), де ax + by = g = gcd(a, b)."""
if b == 0:
return (abs(a), 1 if a > 0 else -1, 0)
g, x1, y1 = extended_gcd(b, a % b)
return (g, y1, x1 - (a // b) * y1)
def mod_inverse(a: int, m: int) -> int:
"""Обернений за модулем: знаходить x таке, що a*x ≡ 1 (mod m), якщо gcd(a, m) = 1."""
g, x, _ = extended_gcd(a, m)
if g != 1:
raise ValueError("Оберненого за модулем не існує")
return x % m
def is_probable_prime(n: int) -> bool:
"""Імовірнісний тест Міллера-Рабіна для n > 3 (достатній для практики).
Для малих n обробляємо тривіально.
"""
if n < 2:
return False
small_primes = [2, 3, 5, 7, 11]
if n in small_primes:
return True
for p in small_primes:
if n % p == 0:
return False
# подаємо n-1 = 2^r * d, де d непарне
d = n - 1
r = 0
while d % 2 == 0:
d //= 2
r += 1
# фіксований набір основ, достатній для помірних n
bases = [2, 3, 5, 7, 11]
for a in bases:
if a % n == 0:
continue
x = pow(a, d, n)
if x == 1 or x == n - 1:
continue
for _ in range(r - 1):
x = pow(x, 2, n)
if x == n - 1:
break
else:
return False
return True
def crt(remainders, moduli):
"""Китайська теорема про остачі: розв'язує систему x ≡ r_i (mod m_i) при попарно взаємно простих m_i.
Повертає (x, M), де M = prod(m_i) і x - найменший невід'ємний розв'язок.
"""
M = 1
for m in moduli:
M *= m
x = 0
for r, m in zip(remainders, moduli):
Mi = M // m
inv = mod_inverse(Mi % m, m)
x = (x + r * Mi * inv) % M
return x, M
if __name__ == "__main__":
# НСД і коефіцієнти Безу
a, b = 252, 198
g, x, y = extended_gcd(a, b)
print("gcd:", g, "Перевірка Безу:", a * x + b * y)
# Обернений за модулем і розв'язання лінійного порівняння a*x ≡ b (mod m)
a, b, m = 7, 5, 26
g = gcd(a, m)
if b % g == 0:
a_, b_, m_ = a // g, b // g, m // g
inv = mod_inverse(a_, m_)
x0 = (inv * b_) % m_
print(f"Розв'язок a*x ≡ b (mod m): x ≡ {x0} (mod {m_})")
# Китайська теорема про остачі: x ≡ 2 (mod 5), x ≡ 3 (mod 7)
x, M = crt([2, 3], [5, 7])
print("CRT:", x, "mod", M) # 17 mod 35
# Імовірнісна перевірка простоти
for n in [97, 221, 10**9 + 7]:
print(n, "просте?", is_probable_prime(n))
# Міні-демо RSA (лише для навчальних цілей!)
p, q = 61, 53
n = p * q
phi = (p - 1) * (q - 1)
e = 17
d = mod_inverse(e, phi)
m = 42
c = pow(m, e, n)
m2 = pow(c, d, n)
print("RSA:", "n=", n, "e=", e, "d=", d, "cipher=", c, "decrypted=", m2)Практичні застосування (в ІТ і на співбесідах)
- Криптографія та безпека: RSA, ECDSA, протоколи обміну ключами - усе спирається на прості числа, модулярну арифметику та складність факторизації/логарифмування.
- Хешування, шардування та розподілені системи: робота за модулем, вибір хороших модулів (зазвичай простих), оцінка колізій і рівномірності.
- Оптимізація алгоритмів: швидке піднесення до степеня, обчислення НСД, обернених за модулем - часто трапляється в задачах на алгоритми та структури даних.
- Контрольні суми, кодування, імовірнісні структури (Bloom-фільтри): вибір параметрів з урахуванням властивостей чисел.
Ключові факти, які варто пам'ятати
- Будь-яке натуральне число > 1 єдиним чином розкладається на прості множники.
- gcd(a, b) можна швидко знаходити алгоритмом Евкліда; розширений варіант дає коефіцієнти для розв'язання лінійних порівнянь.
- Якщо gcd(a, m) = 1, то існує обернений елемент a^{-1} за модулем m, і він єдиний за модулем m.
- Малі теореми (Ферма, Ейлера) дають основу для швидких алгоритмів піднесення до степеня і тестів простоти.
Коротка відповідь
Для співбесідиPremium
Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.