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

mac2022-06-30  12

题目描述

输入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 <bits/stdc++.h> 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 ; } ​

 

最新回复(0)