a ^ b模数k 题: 编写一个程序来计算模数k的b次方。例如,如果要求您计算2 ^ 6 mod 7; 2的6次方是64,因此64模数7是1。
输入规范 你将得到3个整数,a,b和k,其中b代表功率,k代表模数操作数,0≤b≤1000和1 <1。 (a和k)≤1000。
输出规范 只显示一个介于0和k-1之间的整数。
示例输入I
2 6 5
示例输出I
4
#include <iostream>
#include <math.h>
using namespace std;
int main(){
int a, b, k, d;
cin >> a >> b >> k;
int poew = pow(a, b);
d = poew % k;
cout << d;
}
它运行良好,但在测试用例5中失败;
Test Case 5:
---------- input.txt ----------
50 34 31
---------- pattern.txt ----------
28
答案 0 :(得分:2)
您可以使用32位算术执行此操作。你必须在每次乘法后减少mod k,以阻止数字变得过大:
int pow_mod_k (int a, int b, int k) {
int result = 1 ;
while (b--) {
result *= a ;
result %= k ;
}
return result ;
}
正如jadhachem在评论中指出的那样,你可以通过使用平方梯来加快速度。但是对于这么少的数字,它几乎不值得。