我怎样才能模拟一个大的整数值

时间:2017-11-04 18:20:08

标签: c++ modulo long-long

    #include <string>
    #include <iostream>

    using namespace std;

    #include "md5.h"

    int main()
    {
        MD5 md5;

        string message = "secretU";
        char arr[message.size()];
        strcpy(arr, message.c_str());

        //encrypting the message "secretU", it will return a string of hexadecimals
        string result = md5.digestString(arr); 

        //print the result of the encrypted message.
        cout << result; 
        return 0;
    }

以十六进制输出的结果

1853c517b0e1095a341210f1a4b422e6

一旦我尝试转换为十进制,它需要125位大小?但是,无符号long long最多只能包含64位,有没有办法存储这个长整数,以便我可以用我想要的值 modulo 呢?

将十六进制转换为十进制

32336430049777443053240099092194140902

2 个答案:

答案 0 :(得分:2)

您可以手动执行此操作,也可以使用提供https://mattmccutchen.net/bigint/

等大整数的库

答案 1 :(得分:2)

通过将模数分成几块来取模数。例如,你想取 37 ^ 11 mod 77 的模数,其中37 ^ 11给出答案 1.77917621779460E17 所以要得到这个...取一些小数字代替11给出一个整数值..把它分成几块...... 37 ^ 11 mod 77 可以写成(37 ^ 4 x 37 ^ 4 x 37 ^ 3 mod 77)所以解决它为.. {(37 ^ 4 mod 77)(37 ^ 4 mod 77)(37 ^ 3 mod 77)} mod 77 即可。所以,一般来说 xy mod n = {(x mod n)(y mod n)} mod n