<div dir="ltr">Hello all,<div><br></div><div>I have a simple code which computes applies the Chinese Remainder theorem (for a single variable) given three input congruence equations to solve for x; not very elegant but it works:</div><div><br></div><div><div>My query, is it possible to make this more generalised and vary the number of input equations and give the user an option to specify the number of equations? </div><div>For example, one may have 2, 4 or more equations.</div></div><div><br></div><div>Any pointers would be helpful.</div><div><br></div><div>Thanks</div><div>Lester</div><div><pre style="font-family:Arial"><span style="color:rgb(50,185,185)">clear</span>
<span style="color:rgb(100,174,100)">// Chinese Remainder Theorem (CRT) for 3 congruence equations</span>
<span style="color:rgb(100,174,100)">// e.g. x ≡ 3 mod 5; x ≡ 1 mod 7; x ≡ 6 mod 8</span>
<span style="color:rgb(100,174,100)">// result ≡ 78 mod 280</span>
<span style="color:rgb(0,0,0)">m</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(174,92,176);text-decoration-line:underline">evstr</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(50,185,185)">x_dialog</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">[</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">Moduli values: </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">]</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">r</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(174,92,176);text-decoration-line:underline">evstr</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(50,185,185)">x_dialog</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">[</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">Remainder values: </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">]</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">m1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">m</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(0,0,0)">m2</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">m</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(0,0,0)">m3</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">m</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">3</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">r1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">r</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(0,0,0)">r2</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">r</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(0,0,0)">r3</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">r</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(188,143,143)">3</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">n</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(174,92,176);text-decoration-line:underline">evstr</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(50,185,185)">x_dialog</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">[</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">Number of iterations: </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">]</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">M</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">m1</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">m2</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">m3</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">M1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">M</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(0,0,0)">m1</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(0,0,0)">M2</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">M</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(0,0,0)">m2</span><span style="color:rgb(0,0,0)">;</span> <span style="color:rgb(0,0,0)">M3</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">M</span><span style="color:rgb(92,92,92)">/</span><span style="color:rgb(0,0,0)">m3</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">for</span> <span style="color:rgb(0,0,0)">i</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(255,170,0)">:</span><span style="color:rgb(0,0,0)">n</span>
<span style="color:rgb(160,32,240)">if</span> <span style="color:rgb(174,92,176);text-decoration-line:underline">modulo</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">M1</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">m1</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">==</span> <span style="color:rgb(188,143,143)">0</span> <span style="color:rgb(160,32,240)">then</span>
<span style="color:rgb(0,0,0)">M1_inv</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(160,32,240)">if</span> <span style="color:rgb(174,92,176);text-decoration-line:underline">modulo</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">M2</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">m2</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">==</span> <span style="color:rgb(188,143,143)">0</span> <span style="color:rgb(160,32,240)">then</span>
<span style="color:rgb(0,0,0)">M2_inv</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(160,32,240)">if</span> <span style="color:rgb(174,92,176);text-decoration-line:underline">modulo</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">M3</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">-</span><span style="color:rgb(188,143,143)">1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span><span style="color:rgb(0,0,0)">m3</span><span style="color:rgb(74,85,219)">)</span> <span style="color:rgb(92,92,92)">==</span> <span style="color:rgb(188,143,143)">0</span> <span style="color:rgb(160,32,240)">then</span>
<span style="color:rgb(0,0,0)">M3_inv</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(0,0,0)">i</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(160,32,240)">end</span>
<span style="color:rgb(0,0,0)">x1</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">r1</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">M1</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">M1_inv</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">x2</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">r2</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">M2</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">M2_inv</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">x3</span><span style="color:rgb(92,92,92)">=</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">r3</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">M3</span><span style="color:rgb(92,92,92)">*</span><span style="color:rgb(0,0,0)">M3_inv</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(0,0,0)">x</span> <span style="color:rgb(92,92,92)">=</span> <span style="color:rgb(174,92,176);text-decoration-line:underline">modulo</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">x1</span> <span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(0,0,0)">x2</span> <span style="color:rgb(92,92,92)">+</span> <span style="color:rgb(0,0,0)">x3</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">,</span> <span style="color:rgb(0,0,0)">M</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(0,0,0)">;</span>
<span style="color:rgb(50,185,185)">messagebox</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(74,85,219)">[</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">x ≡ </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">r1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)"> mod </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">m1</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span> <span style="color:rgb(255,170,0)">...</span>
<span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">x ≡ </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">r2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)"> mod </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">m2</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span> <span style="color:rgb(255,170,0)">...</span>
<span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">x ≡ </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">r3</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)"> mod </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">m3</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span> <span style="color:rgb(255,170,0)">...</span>
<span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">The solution for (x): </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">x</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)"> mod </span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(92,92,92)">+</span><span style="color:rgb(50,185,185)">string</span><span style="color:rgb(74,85,219)">(</span><span style="color:rgb(0,0,0)">M</span><span style="color:rgb(74,85,219)">)</span><span style="color:rgb(92,92,92)">'</span><span style="color:rgb(74,85,219)">]</span><span style="color:rgb(0,0,0)">,</span> <span style="color:rgb(255,170,0)">...</span>
<span style="color:rgb(188,143,143)">'</span><span style="color:rgb(188,143,143)">Solution of 3 congruence equations</span><span style="color:rgb(188,143,143)">'</span><span style="color:rgb(74,85,219)">)</span></pre></div><div> <br><pre style="font-family:Arial"><span style="color:rgb(74,85,219)"><br></span></pre><pre style="font-family:Arial"><span style="color:rgb(74,85,219)"><br></span></pre></div></div>