zoukankan      html  css  js  c++  java
  • HDU 5187 (快速幂 + 快速乘) == 高精度快速幂

    这个找规律可以发现   结果是  2^n-2   ,但是直接用快速幂的,精度会爆掉(WA了两次),所以快速幂里面的乘法部分用快速乘来展开,解决掉精度的问题

    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll qmul(ll a , ll b, ll mod)
    {
        ll ans = 0 ;
        while(b){
            if(b&1)
                ans = (ans + a) % mod;
            a += a;
            a%=mod;
            b>>=1;
        }
        return ans;
    }
    ll qpow(ll a , ll b , ll mod)
    {
        ll ans = 1 , base = a;
        while(b){
            if(b&1)
                ans = qmul(ans,base,mod) % mod ;
            base = qmul(base,base,mod);
            base %= mod;
            b>>=1;
        }
        return ans%mod;
    }
    int main()
    {
        ll n , mod;
        while(cin>>n>>mod){
            ll temp = qpow(2,n,mod);
            if(mod==1){
                cout<<"0"<<endl;
                continue;
            }
            if(temp == 0 ){
                cout<<mod-2<<endl;
            }else if(temp == 1 ){
                cout<<mod-1<<endl;
            }else{
                cout<<temp-2<<endl;
            }
        }
        
        return 0;
    }
  • 相关阅读:
    准备重启blog。。。
    愿我成功省一。
    [LUOGU]P5502 [JSOI2015]最大公约数
    [LUOGU]P3400 仓鼠窝
    [LUOGU]P5149 会议座位
    OI退役记
    新开博客园~~
    1108 模拟赛
    牛客1102
    题解 CF21B 【Intersection】
  • 原文地址:https://www.cnblogs.com/Li-ningning/p/13680167.html
Copyright © 2011-2022 走看看