簡體   English   中英

大量的模運算

[英]Modulo operation on a very large number

如果無法采用模冪運算,您將如何對相當大的數量執行模運算?

例如,采用以下素數模運算:

6864797660130609714981900799081393217269435300143305409394463459185543183
3976560521225596406614545549772963113914808580371219879997166438125740282
91115057151 % 4

WolframAlpha告訴我它是3。這很好,但是我想編寫一個算法,以便我自己的計算器應用程序可以處理該算法。

我假設對於這么大的數字,我會將數字存儲在數組中,每位一個元素。

我沒有足夠的名聲來發表評論,但是這兩個家伙說,您只能查看最后一位數字是錯誤的,例如%7-您始終必須查看所有數字。

您可能知道(a + b)%n =(a%n + b%n)%n和(a * b)%n =(a%n * b%n)%n使用該函數,我們可以首先計算1 %n,10%n,100%n等,然后將這些值乘以數字中的數字,最后將它們加在一起。

我用c ++編寫的:

//assume we have number of length len in reversed order
//example: 123%9 -> n = 9, num[0] = 3, num[1] = 2; num[2] = 1, len = 3
int mod(int n, int num[], int len)
{
    int powersOf10modn = 1;
    int anwser = 0;
    for(int i = 0; i < len; i++)
    {
        anwser = (anwser + powersOf10modn * num[i]) % n;
        powersOf10modn = (powersOf10modn*10) % n;
    }
    return anwser;
}

如果您有類似xyz%n的數字,則只需執行yz%n。 您需要n%10 + 1個最后一位數字才能使您的操作獲得最佳性能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM