题解 | 求root(N, k)

#include<iostream>

using namespace std;

long long quickpower(long long x, long long y, int k){
    long long ans = 1, temp = x;
    while(y){
        if(y & 1) ans = ans * temp % (k - 1);
        temp = temp * temp % (k - 1);
        y >>= 1;
    }
    return ans ? ans : k - 1;
}

int main(){
    int x, y, k;
    while(cin >> x >> y >> k){
        cout << quickpower(x, y, k) << endl;
    }
    return 0;
}

这题题解做没做过忘记了,但是这个问题其实不难,我们的核心要知道,我们的一切求幂操作,在求乘法的过程中加上无限多个同样的操作都不会改变结果,只要知道这一点,我们就可以对这个求幂的乘法操作进行修改了,当然,我们要先实现这个求幂,对于求幂,也不是干求一个幂的,有前人研究出来了一个优化度极高的快速幂方法,把乘法和位处理结合到求幂中,使求幂更加简单,感兴趣的同学可以去搜索快速幂,然后就是在求幂的时候我们实现模运算即可完成任务,注意直接算必然爆内存。

全部评论

相关推荐

自由水:笑死了,敢这么面试不敢让别人说
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务