将n值的多个检查为模块同余

时间:2014-05-29 08:19:04

标签: c++ cryptography

现在我想检查一下值

int a = pow(9.0,100);
int b = 81;
int c = 547;

当我使用a-b时,该值应该除以c而没有余数;

if( (a-b) % 547 == 0 )
     cout << "Correct" << endl;
else
     cout << "Wrong" << endl;

但输出总是出错,我看到网站链接。答案应该是正确的。 链接可以在这里引用线程:How to calculate modulus of large numbers?

但我的一个人在同余模数时它涉及减号。所以不知道如何编写算法

2 个答案:

答案 0 :(得分:2)

9 ^ 100约为10 ^ 95,因此溢出int。而不是计算10 ^ 95然后模数,你可以使用普通的int来对它进行计算:

int c=1;
for(int i=0; i<100; ++i) 
    c = (c * 9) % 547;

因此c值始终低于547.您还可以使用二进制功率方法加快速度。

对于您的第二个问题 - 计算负值的mod值的最简单方法是使用以下代码执行此操作:

int mod(int a, int n) {
    int res = a % n;
    if (res < 0) res = res + n;
    return res;
}

答案 1 :(得分:1)

9 ^ 100可能超出范围。所以你应该计算powermod(9,100,N),其中N可以是int或使用可以存储任意大小整数的类