Chinese remainder theorem: Difference between revisions

Add implementation of CRT in SQL, using SQLite 3 dialect
m (Remove unused variables from Crystal & Ruby implementations)
(Add implementation of CRT in SQL, using SQLite 3 dialect)
Line 2,535:
23
</pre>
 
=={{header|SQL}}==
 
{{works with|SQLite|3.34.0}}
 
<lang SQL>create temporary table inputs(remainder int, modulus int);
 
insert into inputs values (2, 3), (3, 5), (2, 7);
 
with recursive
 
-- Multiply out the product of moduli
multiplication(idx, product) as (
select 1, 1
 
union all
 
select
multiplication.idx+1,
multiplication.product * inputs.modulus
from
multiplication,
inputs
where
inputs.rowid = multiplication.idx
),
 
-- Take the final value from the product table
product(final_value) as (
select max(product) from multiplication
),
 
-- Calculate the multiplicative inverse from each equation
multiplicative_inverse(id, a, b, x, y) as (
select
inputs.modulus,
product.final_value / inputs.modulus,
inputs.modulus,
0,
1
from
inputs,
product
 
union all
 
select
id,
b, a%b,
y - (a/b)*x, x
from
multiplicative_inverse
where
a>0
)
-- Combine residues into final answer
select
sum(
(y % inputs.modulus) * inputs.remainder * (product.final_value / inputs.modulus)
) % product.final_value
from
multiplicative_inverse, product, inputs
where
a=1 and multiplicative_inverse.id = inputs.modulus;
</lang>
 
{{out}}
<pre>23</pre>
 
=={{header|Swift}}==