用于计算非常非常大的正整数的幂函数的数字模
Digit wise modulo for calculating power function for very very large positive integers
嗨,我正在写一个代码来计算p ^Q,其中
P, Q are positive integers which can have number of digits upto 100000
我希望结果为
result = (P^Q)modulo(10^9+7)
的例子:
P = 34534985349875439875439875349875
Q = 93475349759384754395743975349573495
Answer = 735851262
我试过用这个技巧:
(P^Q)modulo(10^9+7) = (P*P*...(Q times))modulo(10^9+7)
(P*P*...(Q times))modulo(10^9+7) = ((Pmodulo(10^9+7))*(Pmodulo(10^9+7))...(Q times))modulo(10^9+7)
由于p和Q都非常大,我应该将它们存储在数组中,并逐位取模。
是否有任何有效的方法来做到这一点或一些数论算法,我错过了?
Thanks in advance
这是一个相当有效的方法:
1)计算p1 = p模10^9 + 7
2)计算q1 = Q模10^9 + 63)那么p ^Q模10^9 + 7等于p1^q1模10^9 + 7。这个等式成立是因为费马的小定理。注意,p1和q1足够小,可以容纳32位整数,因此可以使用标准整数类型实现二进制指数运算(对于中间计算,64位整数类型就足够了,因为初始值适合32位)。
相关文章:
- 为什么需要复制构造函数,在哪些情况下它们非常有用
- 我在运行函数 GetVolumeInformation() 时得到非常随机的结果
- 一个关于在函数中运行未调用语句的非常奇怪的错误
- 我看到将我的类成员函数指定为内联实际上会增加执行时间,即使函数体非常小
- std::initializer_list私有构造函数是否从编译器那里得到非常特殊的处理
- 在 matlab 中编写一个非常基本的 mex 函数
- 非常特定的未解决的外部符号type_info ::`vftsable在 /nodefaultlib中使用虚拟函数时
- 为什么 Dart 中的原生包装函数与非常轻量级的函数相比"DEFINE NATIVE ENTRY"如此重量级?
- 错误:在非常简单的示例中,预期的构造函数、析构函数或类型转换
- 使用 lambda 函数定义非常小的帮助程序函数是一种好风格吗?
- 无法从非常简单的函数中获得正确答案
- CMAC:非常长的整数作为 random() 函数的种子
- 提高了一个非常简单但用途广泛的函数(计算晶格中原子的邻居)的效率
- 从递归函数返回非常大的整数
- 如何测量c++中特定函数的运行时间{非常准确}
- 用于计算非常非常大的正整数的幂函数的数字模
- 截断非常小的数值的c++函数
- c++函数中非常奇怪的优先级/优先级
- 非常奇怪的构造函数行为
- 非常简单的优化算法产生一个函数参数误差