大数运算
Index
大数取模
取模运算的性质
因为
(a%n) - (b%n)可能小于n,所以+n因为
(a%n)(b%n)可能溢出,计算前应该强转为long long
Code - C++
输入
a为长度小于 1000 的字符串,b为小于100000的整数int big_mod(const string& a, int b) { long ret = 0; // 防止 ret * 10 溢出 for (auto c : a) { ret = ((ret * 10) % b + (c - '0') % b) % b; // ret = ((ret * 10) + (c - '0')) % b } return (int)ret; } /* 示例说明 1234 % 11 == ((((0*10 + 1)*10 + 2)*10 + 3)*10 + 4) % 11 == ((((0*10 + 1)*10 + 2)*10 + 3)*10 % 11 + 4 % 11) % 11 == ((((0*10 + 1)*10 + 2)*10 % 11 + 3 % 11)*10 % 11 + 4 % 11) % 11 == ((((0*10 + 1)*10 % 11 + 2 % 11)*10 % 11 + 3 % 11)*10 % 11 + 4 % 11) % 11 == ((((0*10 % 11 + 1 % 11)*10 % 11 + 2 % 11)*10 % 11 + 3 % 11)*10 % 11 + 4 % 11) % 11
快速幂取模
计算
a^n % b基本方法:根据取模的性质 3 ——
ab % m == (a%m)(b%m) % m时间复杂度
O(N)
快速幂取模
代码跟快速幂很像
示例说明
大数加/减/乘/除
最后更新于
这有帮助吗?