Modüler Aritmetik Hesaplama (mod)
a mod n kalanını negatif sayılar dahil doğru hesaplayın; modüler toplama, çarpma, üs alma (aᵉ mod n) ve modüler ters (a⁻¹ mod n) adım adım. 10¹⁵’e kadar sayılar tam olarak işlenir.
- Bölüm ⌊a ÷ n⌋3
- İşaretli kalan (C, Java, JavaScript %)2
- Sonuç (kalan)2
Nasıl hesaplanır?
Modüler aritmetik, sayıların bir modüle bölümünden kalan üzerinden çalışır; saat, haftanın günleri ve takvim hesapları bunun günlük örnekleridir. IBAN’daki kontrol basamakları (ISO 13616, ISO/IEC 7064 MOD 97-10), karma (hash) fonksiyonları ve RSA şifrelemesi de modüler aritmetiğe dayanır. Programlama dillerinde % işleci negatif sayılarda farklı davranabilir; araç ikisini de gösterir.
a mod n = a − n × ⌊a ÷ n⌋ · 0 ≤ a mod n < na: bölünen (negatif olabilir) · n: modül (pozitif) · ⌊ ⌋: aşağı yuvarlama. a ≡ b (mod n), a ile b’nin n’e bölümünden aynı kalanı verdiğini gösterir.- Bölüm aşağı yuvarlanır (negatif sayılarda da), kalan a − n × bölüm’dür; böylece kalan her zaman 0 ile n − 1 arasında olur.
- Toplama ve çarpmada önce kalanlar alınabilir: (a × b) mod n = ((a mod n) × (b mod n)) mod n.
- aᵉ mod n için üs ikili tabana çevrilir; taban her adımda karesi alınıp mod n’e indirilir ve üssün 1 olan bitlerinde sonuca çarpılır.
- a⁻¹ mod n, genişletilmiş Öklid algoritmasıyla bulunur; yalnızca EBOB(a, n) = 1 ise vardır.
Örnek
17 mod 5 = 2, çünkü 17 = 3 × 5 + 2. Negatif sayıda −7 mod 3 = 2, çünkü −7 = (−3) × 3 + 2. Saat 10’dan 8 saat sonrası (10 + 8) mod 12 = 6. Üs: 3⁷ mod 11 = 2.187 mod 11 = 9. Ters: 17 × 2.753 = 46.801 = 15 × 3.120 + 1, yani 17⁻¹ mod 3.120 = 2.753.
Sık sorulan sorular
Negatif sayının modu nasıl alınır?
Matematikte kalan her zaman 0 ile n − 1 arasındadır: −7 mod 3 = 2 (−7 = −3 × 3 + 2). C, Java ve JavaScript’teki % işleci bölümü sıfıra doğru yuvarladığı için −7 % 3 = −1 verir; Python’daki % ve Excel’deki MOD ise 2 verir.
Büyük üsler nasıl bu kadar hızlı hesaplanıyor?
Ardışık kare alma yöntemiyle: 3²⁰⁰ hiç yazılmaz; 3, 3², 3⁴, 3⁸ … her adımda mod n’e indirilir ve üssün ikili açılımındaki (200 = 11001000₂) basamaklara göre çarpılır. 200 için 8 kare alma yeter; sonuç 3²⁰⁰ mod 50 = 1.
Modüler ters ne zaman yoktur?
a ile n’in 1’den büyük ortak böleni varsa. Örneğin 6 ile 9’un EBOB’u 3 olduğu için 6⁻¹ mod 9 yoktur. n asal ise 0 dışındaki her sayının tersi vardır.
Kaynak
- NIST DLMF §27.2 — kongrüanslar ve Euler fonksiyonu
- ECMA-262 §6.1.6.1.6 Number::remainder: sonucun işareti bölünenin işaretidir (JavaScript %)
- ISO/IEC 9899:2011 (C11) taslağı N1570 §6.5.5: tam sayı bölmesi sıfıra doğru kesilir
- Java Language Specification (SE 21) §15.17.3: kalan işleci %
- Python Language Reference §6.7: % sonucu ikinci işlenenin işaretini taşır
- Microsoft: MOD işlevi (sonuç bölenin işaretini taşır)
- ISO 13616-1:2020 — IBAN yapısı (ISO/IEC 7064 MOD 97-10 kontrol basamakları)