root(N,k)

求root(N, k)

http://www.nowcoder.com/questionTerminal/9324a1458c564c4b9c4bfc3867a2aa66

思路

乘方可以使用乘法快速幂,可以看看我在 leetcode 上的题解。

因为可能会溢出 int,那么我们使用 long long

对于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;
}
算法题解 文章被收录于专栏

不定期更新一些算法题解,有什么问题可以随时留言~

全部评论

相关推荐

已注销:bro不如吃顿疯狂星期四
点赞 评论 收藏
分享
评论
16
2
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务