监狱有连续编号为 1 到 n 的 n 个房间,每个房间关押一个犯人。
有 m 种宗教,每个犯人可能信仰其中一种。
如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。
求有多少种状态可能发生越狱。
输入格式
共一行,包含两个整数 m 和 n。
输出格式
可能越狱的状态数,对 100003 取余。
数据范围
1≤m≤108,
1≤n≤1012
输入样例:
2 3
输出样例:
6
样例解释
所有可能的 6 种状态为:(000)(001)(011)(100)(110)(111)。
解析:
先求一下所有方案数 mn
然后减去不越狱的方案数 m*(m-1)(n-1)
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=100003;
ll n,m;
ll quick(ll a,ll b)
{
ll res=1;
while(b)
{
if(b&1) res=res*a%MOD;
a=a*a%MOD;
b>>=1;
}
return res;
}
int main()
{
scanf("%lld %lld",&m,&n);
cout<<(quick(m,n)%MOD-m*quick(m-1,n-1)%MOD+MOD)%MOD<<endl;
}