快速幂---------越狱

监狱有连续编号为 11 到 nn 的 nn 个房间,每个房间关押一个犯人。
有 mm 种宗教,每个犯人可能信仰其中一种。
如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。
求有多少种状态可能发生越狱。
输入格式
共一行,包含两个整数 mm 和 nn。
输出格式
可能越狱的状态数,对 100003100003 取余。
数据范围
1≤m≤1081≤m≤108,

1≤n≤10121≤n≤1012
输入样例:
2 3

输出样例:
6

样例解释
所有可能的 66 种状态为:(000)(001)(011)(100)(110)(111)(000)(001)(011)(100)(110)(111)。

思路:拿一共的可能减去不越狱的可能
一共可能为每一个人有m种选择,不越狱的话,第一个人有m中选择,后面的人有m-1种选择

#include <iostream>
#include <algorithm>
#include <cstdio> 
#include <cstring>
using namespace std;
const int mod = 100003;
typedef long long LL;
int qmi(int a, LL k){
 int res = 1;
 while(k){
  if (k & 1)   res = (LL)res * a % mod;
  a = (LL)a * a % mod;
  k >>= 1;
 }
 return res;
}
int main(){
 int m;
 LL n;
 cin >> m >> n;
 cout << (qmi(m, n) - (LL)m * qmi(m - 1, n - 1) % mod + mod) % mod << endl;
  return 0;
}
发布了106 篇原创文章 · 获赞 67 · 访问量 5427

猜你喜欢

转载自blog.csdn.net/qq_45772483/article/details/104949085