1 solutions
-
0
注意本题数据比较大,所以要用快速幂。因为是a^b,其中的b我们可以拆分成二进制加和的形式。对于二进制上的每一位分别都是2^n。那么a^b就变成了aΣ2k(其中k代表b拆分成二进制数中为1的位数。答案变成了
a2k_1 * a2k_2 * ……
然后对于每一个a2ki其实都是对上一个a的值取平方a2ki-1²得到的。
#include<bits/stdc++.h> using namespace std; long long a, b, p; long long ans = 1; int main(){ cin>>a>>b>>p; for(; b; b >>= 1){ if(b & 1) ans = ans * a % p; a = a * a % p; } ans %= p; cout<<ans<<endl; return 0; }
- 1
Information
- ID
- 491
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- # Submissions
- 9
- Accepted
- 3
- Uploaded By