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!
  • 相关阅读:
    python selenium 弹框元素获取
    python小知识点
    ubuntu下配置java环境变量
    用Filezilla往ubuntu虚拟机上传文件
    jmeter,监控插件
    fiddler接口测试
    ZeroClipboard 复制到剪贴板 中文文档
    常用正则表达式
    中英文字体对照 ueditor添加字体
    字符串操作
  • 原文地址:https://www.cnblogs.com/--560/p/4338675.html
Copyright © 2011-2022 走看看