acwing 875

acwing875

题目大意:快速幂模板题

Train of thought

此题如果采用暴力的做法时间复杂度为0(n*b);

n为样例的数目,b是幂
我们想要优化暴力的做法,首先样例的数量是没有办法改变的,用二进制的思路来进行思考幂,将幂转换成二进制数表示,可以优化时间复杂度到0(n*logb)
图解
其中还运用了取模运算规则如(a*b) % p = ((a %p) * (b %p)) % p

综上所述,代码如下所示

#include<iostream>
#include<utility>
using namespace std;
typedef long long ll;
#define fi(a,b) for(int i = a; i <= b; ++i)
#define fr(a,b) for(int i = a; i >= b; --i)
using pii = pair<int,int>;
ll quick(ll a, ll b,ll p)
{
   ll res = 1;
    while(b)
    {
        if(b & 1)//取出对应的位看是否是1
            res = res * a % p;
        a = a * a % p;//相应的数进行累乘,幂增加
        b >>= 1;//通过移位继续向后检验
    }
    return res;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
ll n;
cin >> n;
while(n--)
{
    ll a,b,c;
    cin >> a >> b >> c;
    cout << quick(a,b,c) << endl;
}
return 0;
}
posted @   Sun-Wind  阅读(37)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示