现在我想检查一下值
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?
但我的一个人在同余模数时它涉及减号。所以不知道如何编写算法
答案 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或使用可以存储任意大小整数的类