我需要对非常大的整数进行模运算。我的平台支持的最大整数(编辑:.NET 2.0)是64位整数,不足以容纳我正在使用的数字。

如何对非常大的整数(例如12654875632126424875387321657498462167853687516876876)进行模量计算?

我有一个解决方案,将数字视为字符串,然后逐个处理,但是我想知道是否有更好的方法。

这是我将数字视为字符串的函数。基本上,它会按照您手工进行的方式进行长除法。

    Public Function MyMod(ByVal numberString As String, ByVal modby As Integer) As Integer
        Dim position As Integer = -1
        Dim curSubtraction As Integer = 0

        While position < numberString.Length - 1
            position += 1
            curSubtraction = curSubtraction * 10 + CInt(numberString.Substring(position, 1))

            If (curSubtraction / modby) < 1 And position = numberString.Length - 1 Then
                Return curSubtraction
            ElseIf (curSubtraction / modby) < 1 Then
                Continue While
            Else
                curSubtraction = curSubtraction Mod modby
            End If
        End While
        Return curSubtraction
    End Function

有没有更清洁,更有效的方法?

编辑:澄清一下,这些整数来自IBAN银行帐号。根据规范,您必须将IBAN帐号(包含字母)转换为一个整数。然后,对整数进行模量计算。因此,我想您可能会说,要执行模数的整数的真正来源是一串数字。

最佳答案

您尚未指定数字的来源,但可以进行一些简化。如果数字最初较小,请考虑以下内容:

(a + b) MOD n = ((a MOD n) + (b MOD n)) MOD n

或者
ab MOD n = (a MOD n)(b MOD n) MOD n

关于.net - 执行大量的模数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/278440/

10-17 02:35