不能越狱(相邻两个房间的人的宗教信仰不同)的方案为:M*(M-1)^(N-1),第一个监狱里的犯人可以有M个宗教选择,第二个监狱里的犯人可以有M-1中选择(保证和第一个监狱里的犯人不重复即可),同理,第三个监狱的犯人只需和第二个监狱里的不一样,也是M-1个选择,,,,以此类推,共N个监狱,除第一个监狱有M个选择,其余N-1个监狱只有M-1中选择,所以M*(M-1)^(N-1)
高精度就好了
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
const long long mod=100003;
using namespace std;
long long quick_pow(long long a,long long k){
long long temp=a;
long long ans=1;
while(k>0){
if(k%2==1){
ans=((ans*temp%mod)+mod)%mod;
}
temp=((temp*temp%mod)+mod)%mod;
// temp%=mod;
k=k/2;
}
return ans%mod;
}
long long n,m;
int main(){
cin>>m>>n;
// cout<<quick_pow(2,12)<<endl;
// cout<<quick_pow(m,n)<<endl;
// cout<<m*quick_pow(m-1,n-1)<<endl;
cout<<((quick_pow(m,n)%mod-m*quick_pow(m-1,n-1)%mod+mod)%mod+mod)%mod;
return 0;
}