很简单,我已经将一个大字符串作为输入传递给GMP的mpz_class构造函数,该值是一个不同的整数。这些值是通过vs代码的调试器获取的。
来自主文件:
User john(1024, "340282366920938463463370103832140841039", "340282366920938463463370103832140841051", 17);
用户构造函数:
User::User(const int k, std::string p, std::string q, const int e)
{
this->m_k = k;
this->m_p = mpz_class(p);
this->m_q = mpz_class(q);
this->m_e = e;
this->m_N = this->m_p*this->m_q;
this->m_phi = (this->m_p - 1)*(this->m_q - 1);
}
预期的m_p
值:340282366920938463463370103832140841039
实际:18442240474082181199
预期m_q
值:340282366920938463463370103832140841051
实际:18442240474082181211
看起来这两个数字之间的差值仍然是12,但它们不是预期值。应当提及的是,k
和e
都被正确地设置。
这种情况会变得更糟。
User monica(k,
"79769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536000572708014448059344998673038813914022686832575861451235712608115812630507553330258219736187415555294488994451070856629343158126535469257597644947476477135408478542176849830316880553240227849994894682804453799",
"79769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536000572708014448059344998673038813914022686832575861451235712608115812630507553330258219736187415555294488994451070856629343158126535469257597644947476477135408478542176849830316880553240227849994894682804454189",
65537);
在这种情况下,m_p == 423
和m_q == 813
是非常遥远的!
我犯了一个简单的错误吗?谢谢你的帮助!
编辑:添加一个可重复的最小示例。
std::string pp = "79769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536000572708014448059344998673038813914022686832575861451235712608115812630507553330258219736187415555294488994451070856629343158126535469257597644947476477135408478542176849830316880553240227849994894682804453799";
mpz_class p(pp);
std::cout << p << 'n';
打印出来会得到原始数字,但vscode显示了某种压缩值。我想实际的问题在代码的其他地方。但是为什么VSCode会显示这样大的数字呢?
这似乎是一个vscode的事情,因为打印出mpz_class会得到原始数字,但在调试器中,我得到了一个奇怪的值。
我仍然不知道vscode为什么会这样做(可能与输入的大小有关(。