监狱有连续编号为 1 到 n 的 n 个房间,每个房间关押一个犯人。
有 m 种宗教,每个犯人可能信仰其中一种。
如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。
求有多少种状态可能发生越狱。
输入格式
共一行,包含两个整数 m 和 n。
输出格式
可能越狱的状态数,对 100003 取余。
数据范围
1≤m≤10^8,
1≤n≤10^12
输入样例:
2 3
输出样例:
6
样例解释
所有可能的 6 种状态为:(000)(001)(011)(100)(110)(111)。
如果高中学过排列组合的话,本题正难则反的思想就不难理解了。
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int mod = 100003;
int qmi(int a, int b)
{
int res = 1;
while (b)
{
if (b & 1) res = res * a % mod;
a = a * a % mod;
b >>= 1;
}
return res;
}
signed main()
{
int m, n;
cin>>m>>n;
int res = (qmi(m, n) - m * qmi(m - 1, n - 1) % mod + mod) % mod;//防止为负
cout<<res<<endl;
return 0;
}