Chinese remainder theorem: Difference between revisions

Content added Content deleted
(Updated to work with version 1.4 of Nim.)
(add freebasic)
Line 796: Line 796:
10 11 4 22 9 19 3 >>>crt<<< .
10 11 4 22 9 19 3 >>>crt<<< .
</pre>
</pre>

=={{header|FreeBASIC}}==
Partial {{trans|C}}. Uses the code from [[Greatest_common_divisor#Recursive_solution]] as an include.
<lang freebasic>
#include "gcd.bas"
function mul_inv( a as integer, b as integer ) as integer
if b = 1 then return 1
for i as integer = 1 to b
if a*i mod b = 1 then return i
next i
return 0
end function
function chinese_remainder(n() as integer, a() as integer) as integer
dim as integer p, i, prod = 1, sum = 0, ln = ubound(n)
for p = 0 to ln-1
for i = p+1 to ln
if gcd(n(i), n(p))>1 then
print "N not coprime"
end
end if
next i
next p
for i = 0 to ln
prod *= n(i)
next i
for i = 0 to ln
p = prod/n(i)
sum += a(i) * mul_inv(p, n(i))*p
next i
return sum mod prod
end function
dim as integer n(0 to 2) = { 3, 5, 7 }
dim as integer a(0 to 2) = { 2, 3, 2 }
print chinese_remainder(n(), a())</lang>
{{out}}<pre>23>/pre>


=={{header|FunL}}==
=={{header|FunL}}==