牛客网———求root(N,k)

题目描述

    N<k时,root(N,k) = N,否则,root(N,k) = root(N',k)。N'为N的k进制表示的各位数字之和。输入x,y,k,输出root(x^y,k)的值 (这里^为乘方,不是异或),2=<k<=16,0<x,y<2000000000,有一半的测试点里 x^y 会溢出int的范围(>=2000000000) 

输入描述:

    每组测试数据包括一行,x(0<x<2000000000), y(0<y<2000000000), k(2<=k<=16)

输出描述:

    输入可能有多组数据,对于每一组数据,root(x^y, k)的值
示例1

输入

4 4 10

输出

4
链接:https://www.nowcoder.com/questionTerminal/9324a1458c564c4b9c4bfc3867a2aa66
来源:牛客网

#include <stdio.h>
int main(){
    for(long x,y,k,r;~scanf("%ld%ld%ld",&x,&y,&k);){
        for(r=1,k-=1;y;r=(y&1?r*x%k:r),x=x*x%k,y>>=1);
        printf("%ld\n",r?r:k);
    }
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/JAYPARK/p/10079600.html