Τετάρτη 27 Αυγούστου 2025

Κινέζικο Θεώρημα Υπολοίπων (CRT): Από τη Θεωρία στον Αλγόριθμο

Το CRT λύνει ταυτόχρονα πολλά συστήματα υπολοίπων και, όταν τα μέτρα είναι ανά δύο πρώτα, εγγυάται μοναδική λύση modulo το γινόμενό τους.

Διατύπωση

Έστω ακέραια μέτρα m1,,mkm_1,\dots,m_k με gcd(mi,mj)=1\gcd(m_i,m_j)=1 για κάθε iji\ne j. Για οποιαδήποτε υπόλοιπα a1,,aka_1,\dots,a_k υπάρχει μοναδικό x(modM)x\pmod{M}, όπου

M=i=1kmi,

τέτοιο ώστε

xai(modmi)(i=1,,k).

Δηλαδή όλες οι λύσεις είναι της μορφής xx0(modM)x\equiv x_0\pmod{M} για ένα και μόνο x0{0,1,,M1}x_0\in\{0,1,\dots,M-1\}.

Αλγοριθμική κατασκευή της λύσης

Θέσε M=i=1kmiM=\prod_{i=1}^k m_i και Mi=M/miM_i=M/m_i. Βρες για κάθε ii έναν αντίστροφο NiN_i του MiM_i modulo mim_i:

MiNi1(modmi)(με εκτεταμένο Ευκλείδειο).

Τότε μία λύση είναι

xi=1kaiMiNi(modM).

Παράδειγμα

Λύσε

x2(mod3),x3(mod5),x2(mod7).x\equiv2\pmod{3},\qquad x\equiv3\pmod{5},\qquad x\equiv2\pmod{7}.

Έχουμε M=357=105M=3\cdot5\cdot7=105.

M1=352(mod3)  N1=2M_1=35\equiv 2 \pmod{3}\ \Rightarrow\ N_1=2

M2=211(mod5)  N2=1M_2=21\equiv 1 \pmod{5}\ \Rightarrow\ N_2=1

M3=151(mod7)  N3=1M_3=15\equiv 1 \pmod{7}\ \Rightarrow\ N_3=1

Άρα

x2352+3211+2151=140+63+30=23323(mod105).

Γενική λύση: x=23+105t, tZx=23+105t,\ t\in\mathbb{Z}.

Αν τα μέτρα δεν είναι ανά δύο πρώτα

Το σύστημα xai(modmi)x\equiv a_i\pmod{m_i} έχει λύση αν και μόνο αν για όλα τα ζεύγη i,ji,j ισχύει

aiaj(modgcd(mi,mj)).

Τότε οι λύσεις είναι μοναδικές modulo lcm(m1,,mk)\operatorname{lcm}(m_1,\dots,m_k).

Εφαρμογές

  • Συγχρονισμός ρολογιών/ημερολογίων

  • Υπολογισμοί με μεγάλα ακέραια (διάσπαση σε μικρότερα moduli)

  • Επιτάχυνση αποκρυπτογράφησης RSA με CRT

  • Hashing βασισμένο σε υπολείμματα

  • Αλγόριθμος Garner για σταδιακή ανακατασκευή αριθμών από υπολείμματα

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου

>
.related-posts { margin-top: 32px; padding: 20px; border: 1px solid #ddd; border-radius: 12px; background-color: #f9f9f9; box-shadow: 0 2px 6px rgba(0,0,0,0.05); } .related-posts .rp-title { font-size: 20px; font-weight: 700; margin-bottom: 12px; color: #333; } .related-posts .rp-list { list-style: none; padding-left: 0; margin: 0; } .related-posts .rp-list li { margin: 8px 0; padding-left: 20px; position: relative; transition: background-color 0.3s ease; } .related-posts .rp-list li::before { content: "📌"; position: absolute; left: 0; top: 0; } .related-posts .rp-list li:hover { background-color: #eef; border-radius: 6px; } .crml-btn-stop { background-color: #FF6C00 !important; color: #fff !important; }