luogu3197

思路

看了很久没思路,看了题解发现自己好zz。用全部的情况减去不合法的情况就行了。全部的情况就是每个人随便选,总共有\(m^n\)种情况,然后考虑不合法的情况,也就是任意相邻的两个人不能信仰同一宗教,第一个人有m个宗教可以选,后面的每个人因为都不能和前面那个人相同,所以后面的每个人有m-1个宗教可以选。所以最终答案就是\(m^n-m*(m-1)^{n-1}\)

代码

#include<cstdio>
#include<iostream>
using namespace std;
typedef long long ll;
const int mod=100003;
ll read() {
                ll x=0, tmp=1;
              char ch=getchar();
           //wxywwwwwwwwwwwwwwwwwwww
         while( (ch<'0') || (ch>'9') ){
        if(ch=='-')tmp=-1; ch=getchar();}
         while( (ch>='0')&&(ch<='9') ){
           x=x*10+ch-'0';ch=getchar();
              }//wxywwwwwwwwwwwwwwww
                return (x*tmp);
}
ll qmi(ll x,ll y) {
    ll ans=1;
    ll now=x;
    while(y) {
        if(y&1) ans=ans*now%mod;
        now=now*now%mod;
        y>>=1;
    }
    return ans;
}
int main() {
    ll m=read();
    ll n=read();
    cout<<(qmi(m,n)%mod-qmi(m-1,n-1)*m%mod+mod)%mod;
    return 0;
}