当前位置:  开发笔记 > 编程语言 > 正文

大量执行模数?

如何解决《大量执行模数?》经验,为你挑选了1个好方法。

我需要对非常大的整数进行模运算.我的平台支持的最大整数(编辑:.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帐号(包含字母)转换为一个整数.然后,对整数执行模数.所以,我猜你可以说执行模数的整数的真正来源是一串数字.



1> Tony Arkles..:

您尚未指定数字的来源,但您可以进行一些简化.如果数字原来是较小的,那么考虑如下:

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

要么

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

推荐阅读
手机用户2502852037
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有