机试题 求root(N,k)

不会做这道题,连代码都看不懂。。。不愧是清华的题……

import java.io.*;
public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
        String line;
        while((line=br.readLine())!=null){
            String[] input=line.split(" ");
            System.out.println(root(Long.valueOf(input[0]), Long.valueOf(input[1]), Long.valueOf(input[2])));
        }
        br.close();
    }
    static long root(long x,long y,long k){
        long ans=1;
        k-=1;
        while(y>0){
            if((y&1)==1)
//如果y是奇数那么y&1的值就是1,如果x是偶数那么y&1=0
                ans=(ans*x)%k;
            x=(x*x)%k;
            y=y>>1;
        }
        return ans==0?k:ans;
    }
}

这里用的应该是快速幂取模快速算法,看了几篇介绍这个算法的博客,但还是不懂……(脑子锈掉了,锈只有一点点去磨光)

先Mark

快速幂取模快速算法超级详细介绍

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值