题目描述
监狱有 nnn 个房间,每个房间关押一个犯人,有 mmm 种宗教,每个犯人会信仰其中一种。如果相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱。
答案对 100,003100,003100,003 取模。
输入格式
输入只有一行两个整数,分别代表宗教数 mmm 和房间数 nnn。
输出格式
输出一行一个整数代表答案。
输入输出样例
输入 #1
2 3
输出 #1
6
说明/提示
样例输入输出 1 解释
状态编号 1 号房间 2 号房间 3 号房间
1 信仰 1 信仰 1 信仰 1
2 信仰 1 信仰 1 信仰 2
3 信仰 1 信仰 2 信仰 2
4 信仰 2 信仰 1 信仰 1
5 信仰 2 信仰 2 信仰 2
6 信仰 2 信仰 2 信仰 1
数据规模与约定
对于 100%100%100% 的数据,保证 1≤m≤1081 \le m \le 10^81≤m≤108,1≤n≤10121 \le n \le 10^{12}1≤n≤1012。
#include <iostream>
using namespace std;
int mod = 1e5 + 3;
typedef long long ll;
ll ksm(ll a, ll b) {
ll ans = 1;
while(b) {
if(b & 1) ans = ans * a % mod;
b >>= 1;
a = a * a % mod;
}
return ans % mod;;
}
int main() {
ll n, m, ans = 1;
cin >> m >> n;
ans = ksm(m, n);
ll tem = m - 1;
// cout << ans << endl << tem << endl;
tem = ksm(tem % mod, n - 1);
tem = tem * m % mod;
// cout << ans << endl << tem << endl;
ans = ans - tem;
cout << (ans + mod) % mod << endl;
return 0;
}