1. 程式人生 > >[HNOI2008]越獄 快速冪 逆推

[HNOI2008]越獄 快速冪 逆推

ret mod () include a* ... brush cout tdi

考慮越獄的情況有些復雜,不如考慮總情況減去不越獄的情況。

顯然,總情況為 $m^n$ 種,不越獄的情況為 $m*(m-1)*(m-1)*(m-1)....$ 即為 $m*(m-1)^(n-1)$.

做差即可。

Code:

#include<cstdio>
#include<iostream>
typedef long long ll;
using namespace std;
const ll mod=100003;
ll pow(ll a,ll b,ll c){
    ll res=1;
    while(b>0){
        if(b&1) res=(res*a)%c;
        a=(a*a) % c;
        b>>=1;
    }
    return res % c;
}
int main(){
    ll n,m;
    cin>>m>>n;
    cout<<(pow(m,n,mod)-(pow(m-1,n-1,mod)*(m%mod))%mod+mod)%mod;
    return 0;
}

  

[HNOI2008]越獄 快速冪 逆推