标签:type namespace mod 快速乘 using include 乘法 ace turn
这个找规律可以发现 结果是 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; }
HDU 5187 (快速幂 + 快速乘) == 高精度快速幂
标签:type namespace mod 快速乘 using include 乘法 ace turn
原文地址:https://www.cnblogs.com/Li-ningning/p/13680167.html