hdu 5187 zhx's contest 快速幂,快速乘

来源:互联网 发布:pl sql developer ip 编辑:程序博客网 时间:2024/05/17 02:32

答案就是(2^n-2)%p,由于p很大,直接快速幂会爆掉,用个快速乘。

#include<iostream>#include<cstring>#include<cstdio>#include<ostream>#include<istream>#include<algorithm>#include<queue>#include<string>#include<cmath>#include<set>#include<map>#include<stack>#include<vector>#define fi first#define se second#define ll long long#define pii pair<int,int>#define inf (1<<30)#define eps 1e-8#define pb push_backusing namespace std;const int maxn=110005;ll n,p;ll mul(ll a,ll b){    if(b==0)        return 0;    ll ans=mul(a,b/2);    ans=(ans+ans)%p;    if(b&1)        ans=(ans+a)%p;    return ans;}ll powMod(ll a,ll b){    if(b==0) return 1;    ll ans=powMod(a,b/2);    ans=mul(ans,ans);    if(b&1)        ans=mul(ans,a);    return ans;}int main(){    while(~scanf("%I64d%I64d",&n,&p)) {        ll ans=(powMod(2,n-1)-2+p)%p*2%p;        ans=(ans+2)%p;        printf("%I64d\n",ans);    }    return 0;}


0 0
原创粉丝点击