这两天编写rsa算法,总是在一个地方出现问题,找了两天终于发现了这个问题的关键。但是我想不出该怎么解决。问题关键点如下
注:ll是 long long
就像是上面,d,e是公私钥,q,p是大素数,按照算法de的乘积对pq各自减一的乘积求余,所得应该是1,所以上下两个输出都应该是1才对,但是却发生奇怪问题。
对于这个我有一点猜测,这可能大数运算溢出的错,上面的式子,我把几个大数都存在了long long形变量中,所以没有发生问题。但在下面的式子中,我是直接给出了大数,我猜,可能是c++语言会给这种程序中直接给出的数分配一个默认的数据类型和储存空间,这个类型很可能小于long long 于是导致了溢出。
但是实话说我对c++还有他的内部原理不太了解,不清楚对不对,希望有人帮我解答。
如果可以的话,还希望有人能推荐我一些有关这方面的资料让我学习一下。
非常感谢。
你说的是有道理的,肯定不会默认为long long,一般都是int,你的数太大,会溢出