做蓝桥杯训练题时做【试题 算法提高 快速幂】
对100%的数据,A, B为long long范围内的非负整数,但是我发现只通过了40%的数据
简单快速幂建议看大佬的易懂,链接戳这里
https://blog.csdn.net/IAMLSL/article/details/107941519?ops_request_term=%E5%BF%AB%E9%80%9F%E5%B9%82&spm=1018.2226.3001.4187
代码如下:
#include<iostream>
using namespace std;
typedef long long ll;
ll quick_pow(ll a,ll b,ll p)
{
ll ans;
while(b)
{
if(b&1)ans=ans*a%p;
a=a*a%p;
b>>=1;
}
return ans;
}
int main()
{
ll a,b,p;cin>>a>>b>>p;
cout<<quick_pow(a,b,p);
return 0;
}
之后我搜索之后改进了代码
加了递归,
#include <iostream>
typedef long long ll;
using namespace std;
ll q(ll a,ll b ,ll p)
{
if(b==0) return 1;
if(b&1) return q(a,b-1,p)*(a%p)%p;
ll ans=q(a,b/2,p);
return ans*ans%p;
}
int main()
{
ll a,b,p;
cin>>a>>b>>p;
cout<<q(a,b,p);
return 0;
}
ac通过!!!
说真的小龙我真菜~~ ~~