3 条题解
-
0
def quick_pow_mod_iterative(a, b, p): result = 1 base = a % p while b > 0: if b % 2 == 1: # b 是奇数 result = (result * base) % p base = (base * base) % p b //= 2 return result n = int(input()) for _ in range(n): a, k, p = map(int, input().split()) result = quick_pow_mod_iterative(a, k, p) print(result)
-
0
#include <bits/stdc++.h>
using namespace std;
long long a ,k ,p; //mypow 只是一个自定义名字 long long myPow( long long a , long long k , long long p) { long long res=1; while (k){ if(k&1) res=res*a%p; k >>=1;/相当于指数除以2 a = a*a%p; } return res; } int main(){ int n; cin >>n; while (n--) { long long a,k ,p; cin >>a>>k >>p; cout << myPow(a,k,p) << '\n'; } return 0;
}
-
0
拓展: 如果 可以为负数, 即 (这样写是为了方便看(因为严格来讲
k
现在是负数)) 那么可以先求 然后 返回 (注: 返回值为double
), 特判 k 为负数的情况. (可以试试力扣pow(x, y)
这题)❤️#include <iostream> using namespace std; using ll = long long; ll myPow(ll a, ll k, ll p) { ll res = 1; while (k) { if (k & 1) res = res * a % p; k >>= 1; a = a * a % p; } return res; } int main() { int n; cin >> n; while (n--) { ll a, k, p; cin >> a >> k >> p; cout << myPow(a, k, p) << '\n'; } return 0; }
- 1
信息
- ID
- 97
- 时间
- 2000ms
- 内存
- 256MiB
- 难度
- 6
- 标签
- 递交数
- 287
- 已通过
- 98
- 上传者