C ++:a到幂b模数k

时间:2015-05-09 08:58:46

标签: c++

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

1 个答案:

答案 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在评论中指出的那样,你可以通过使用平方梯来加快速度。但是对于这么少的数字,它几乎不值得。