zoukankan      html  css  js  c++  java
  • 二分快速幂

    二分快速幂

    求a的b次方,自定义pow库函数:

    pow(a, b)是数学头文件math.h里面有的函数,但是它返回值是double类型,数据有精度误差。
    可以改成这样:

    long long pow(long long a, long long b){
        long long ret = 1;
        for(long long i = 1; i <= b; i ++){
            ret *= a;
        }
        return ret;
    }
    

    二分快速幂:

    数据量大会超时,使用自定义的pow也要超时,这时候要使用二分快速幂了

    代码模板:

    递归写法

    	const int MOD=1e9+7;
    	typedef long long ll;
    	
    	ll pow_mod(ll a, ll b){//a的b次方
    	    if(b == 0) return 1%MOD;
    	    ll ret = pow_mod(a, b/2);
    	    ret = ret * ret % MOD;
    	    if(b % 2 == 1) ret = ret * a % MOD;
    	    return ret;
    	}
    

    循环写法:

    #include<bits/stdc++.h>
    using namespace std;
    int pow_mod(int a, int n, int mod)
    {
        long long ans = 1;
        while(n){
            if(n&1){
                ans = (ans * a) % mod;
            }
            a = (a * a) % mod;
            n >>= 1;
        }
        return ans;
    }
    int main()
    {
        int a, n, mod;
        cin >> a >> n >> mod;
        cout << pow_mod(a, n, mod);
    }
    
    

    快速乘:

    LL mul(LL a, LL b, LL p){//快速乘,计算a*b%p 
        LL ret = 0;
        while(b){
            if(b & 1) ret = (ret + a) % p;
            a = (a + a) % p;
            b >>= 1;
        }
        return ret;
    }
  • 相关阅读:
    nodeType 节点简介
    Hamming Codes
    Preface Numbering(还没好好看USACO的解答)
    位运算常见应用即ACM题优化实例
    Dynamic Programming(动态规划)
    operator new & new operator
    资料记录
    Ordered Fractions
    Healthy Holsteins
    Sorting A ThreeValued Sequence
  • 原文地址:https://www.cnblogs.com/fisherss/p/10012340.html
Copyright © 2011-2022 走看看