算法之快速幂

package com.zhang.reflection.面试.算法模版.快速幂;

public class QM {
    public static void main(String[] args) {
        System.out.println(quickM(10,9));
    }
    public static int quickM(int base,int power){
        int result=1;
        while(power>0){
            if(power%2==1){
                result=result*base;
                power=power/2;
                base=base*base;
            }else{
                power=power/2;
                base=base*base;
            }
        }
        return result;
    }
}

package com.zhang.reflection.面试.算法模版.快速幂;

/**
 * 你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出。
 */
public class QM1 {
    private static final int MOD=1337;
    public static void main(String[] args) {
        int a=2147483647;
        int[] b={2,0,0};
        System.out.println(superPow(a,b));
    }
    private static int superPow(int a,int[] b){
        return dfs(a%MOD,b,b.length-1);
    }
    private static int dfs(int a,int[] b,int idx){
        if(idx==-1||a==1){
            return 1;
        }
        return qPow(dfs(a,b,idx-1),10)*qPow(a,b[idx])%MOD;
    }
    private static int qPow(int a,int b){
        int result=1;
        a=a%MOD;
        while(b>0){
            if(b%2==1){
                result=result*a%MOD;
                b=b/2;
                a=a*a% MOD;
            }else{
                a=a*a%MOD;
                b=b/2;
            }
        }
        return result;
    }
}
全部评论

相关推荐

05-19 19:57
蚌埠学院 Python
2237:Gpa70不算高,建议只写排名,个人技能不在多而在精,缩到8条以内。项目留一个含金量高的,减少间距弄到一页,硕士简历也就一页,本科不要写很多
点赞 评论 收藏
分享
Ncsbbss:又想干活又想要工资,怎么什么好事都让你占了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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