zoukankan      html  css  js  c++  java
  • 快速幂模版

    快速幂模版

    快速幂的思想是分治,根据题目的数据要注意long long 

    快速幂普通版,比取余版快,但容易超范围,慎用,一般可用取余版MOD设为INF:

    //快速幂普通版(未取余)
    long long quickpow(long long n,long long k)
    {
        long long res=1;
        while(k){
            if(k&1) res*=n;
            n*=n;
            k=k>>1; //即k/=2,采用位运算更快
        }
        return res;
    }
    快速幂普通版(未取余)

    快速幂取余数版:

    //快速幂取余版
    long long quickpow(long long n,long long k,long long MOD)
    {
        long long res=1;
        while(k){
            if(k&1) res=(res*n)%MOD;
            n=(n*n)%MOD;
            k=k>>1;
        }
        return res;
    }
    快速幂取余版

     由于若题目数据太大,会使快速幂时由于是先乘后取余,乘后会导致越界,故可采用模拟乘法,在模拟乘法过程中取余数

    /* 快速幂取余+模拟乘法 */
    long long multi(long long a,long long b,long long MOD)//模拟乘法,a*b=a+a+a+...+a(b个a相加) 方法用分治,和快速幂相同
    {
        long long res=0;
        while(b){
            if(b&1) res=(res+a)%MOD;
            a=(2*a)%MOD;
            b=b>>1;
        }
        return res;
    }
    
    long long quickpow(long long n,long long k,long long MOD)
    {
        long long res=1;
        while(k){
            if(k&1) res=multi(res,n,MOD);//直接乘会越界,需要模拟在模拟过程中取余数
            n=multi(n,n,MOD);
            k=k>>1; //也就是K/=2,位运算更快
        }
        return res;
    }
    快速幂取余+模拟乘法
    没有AC不了的题,只有不努力的ACMER!
  • 相关阅读:
    Java Arrays 的基础知识
    Java 基础知识
    C
    165. 小猫爬山 (dfs)
    164. 可达性统计
    数码 美团资格赛(整数分块)
    1079 中国剩余定理(模板)
    5814: 余数之和(整数分块)
    Greedy Sequence(主席树-区间小于每个数的最大值)
    XKC's basketball team(单调栈+二分)
  • 原文地址:https://www.cnblogs.com/--560/p/4338675.html
Copyright © 2011-2022 走看看