[HNOI2008]越狱
题目
想法
以后这种题目考虑容斥
正着不做我们考虑全集减补集
补集就是相邻的人都不信仰同一宗教
易得
\(ans\ =\ m ^ n\ - m * (m\ -\ 1) ^ {n\ -\ 1}\)
代码
#include<iostream>
#include<cstdio>
#define ll long long
ll n,m,mod = 100003;
ll qpow(ll a,ll b){
ll ans = 1;
while(b){
if(b & 1) ans = ans * a % mod;
a = a * a % mod;
b >>= 1;
}
return ans % mod;
}
int main(){
scanf("%lld%lld",&m,&n);
std::cout<<(1ll * qpow(m,n) - 1ll * m * qpow(m - 1,n - 1) % mod + mod) % mod;
}