Modular arithmetic: Difference between revisions
Content added Content deleted
m (→{{header|Wren}}: Changed to Wren S/H) |
(Added FreeBASIC) |
||
Line 1,260: | Line 1,260: | ||
g(10) ≅ 7 (mod 13) |
g(10) ≅ 7 (mod 13) |
||
</pre> |
</pre> |
||
=={{header|FreeBASIC}}== |
|||
{{trans|Visual Basic .NET}} |
|||
<syntaxhighlight lang="vbnet">Type ModInt |
|||
As Ulongint Value |
|||
As Ulongint Modulo |
|||
End Type |
|||
Function Add_(lhs As ModInt, rhs As ModInt) As ModInt |
|||
If lhs.Modulo <> rhs.Modulo Then Print "Cannot add rings with different modulus": End |
|||
Dim res As ModInt |
|||
res.Value = (lhs.Value + rhs.Value) Mod lhs.Modulo |
|||
res.Modulo = lhs.Modulo |
|||
Return res |
|||
End Function |
|||
Function Multiply(lhs As ModInt, rhs As ModInt) As ModInt |
|||
If lhs.Modulo <> rhs.Modulo Then Print "Cannot multiply rings with different modulus": End |
|||
Dim res As ModInt |
|||
res.Value = (lhs.Value * rhs.Value) Mod lhs.Modulo |
|||
res.Modulo = lhs.Modulo |
|||
Return res |
|||
End Function |
|||
Function One(self As ModInt) As ModInt |
|||
Dim res As ModInt |
|||
res.Value = 1 |
|||
res.Modulo = self.Modulo |
|||
Return res |
|||
End Function |
|||
Function Power(self As ModInt, p As Ulongint) As ModInt |
|||
If p < 0 Then Print "p must be zero or greater": End |
|||
Dim pp As Ulongint = p |
|||
Dim pwr As ModInt = One(self) |
|||
While pp > 0 |
|||
pp -= 1 |
|||
pwr = Multiply(pwr, self) |
|||
Wend |
|||
Return pwr |
|||
End Function |
|||
Function F(x As ModInt) As ModInt |
|||
Return Add_(Power(x, 100), Add_(x, One(x))) |
|||
End Function |
|||
Dim x As ModInt |
|||
x.Value = 10 |
|||
x.Modulo = 13 |
|||
Dim y As ModInt = F(x) |
|||
Print Using "x ^ 100 + x + 1 for x = ModInt(&, &) is ModInt(&, &)"; x.Value; x.Modulo; y.Value; y.Modulo |
|||
Sleep</syntaxhighlight> |
|||
{{out}} |
|||
<pre>x ^ 100 + x + 1 for x = ModInt(10, 13) is ModInt(1, 13)</pre> |
|||
=={{header|Go}}== |
=={{header|Go}}== |