P1226 【模板】快速幂||取余运算 洛谷(十进制思路)

题目描述

输入b,p,k的值,求b^p mod k的值。其中b,p,k*k为长整型数。

输入格式

三个整数b,p,k.

输出格式

输出“b^p mod k=s”

s为运算结果

输入输出样例

输入 #1

2 10 9

输出 #1

2^10 mod 9=7

例如3^405可以拆分为 (3 ^1) ^5 * ( 3^10 ) ^0 * (3 ^ 100) ^ 4.

​

/*
@Author: Top_Spirit
@Language: C++
*/
#include 
using namespace std ;
typedef unsigned long long ull ;
typedef long long ll ;
const int Maxn = 1e3 + 10 ;
const int INF = 0x3f3f3f3f ;
const double PI = acos(-1.0) ;
const ull seed = 133 ;
const int MOD = 51123987 ;

ll b, k, len ;
string p;
ll ans = 1 ;

void solve(){
    len = p.size() ;
    len-- ;
    ans = 1 ;
    ll base = b ;
    while (len >= 0){
        ll cnt = p[len] - '0' ;
        ll Pow = base ;
        for (ll i = 1; i <= cnt; i++){
            ans = ans * base % k ;
        }
        for (int i = 1; i < 10; i++){
            Pow = Pow * base % k ;
        }
        base = Pow ;
        ans = ans % k ;
        len-- ;
    }
    cout << b << "^" << p << " mod " << k << "=" << ans << endl ;
}

int main (){
    cin >> b >> p >> k ;
    solve() ;
    return 0 ;
}

​

 

你可能感兴趣的:(快速幂)