当前位置:首页 > 编程笔记 > 正文
已解决

越狱(快速幂C++)

来自网友在路上 175875提问 提问时间:2023-09-21 19:48:50阅读次数: 75

最佳答案 问答题库758位专家为你答疑解惑

题目

监狱有连续编号为 11 到 n 的 n 个房间,每个房间关押一个犯人。

有 m 种宗教,每个犯人可能信仰其中一种。

不存在没有信仰的犯人。

如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。

求有多少种状态可能发生越狱。

输入格式

共一行,包含两个整数 m和 n。

输出格式

可能越狱的状态数,对 100003100003 取余。

数据范围

1≤m≤108
1≤n≤1012

输入样例:
2 3
输出样例:
6
样例解释

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

代码

#include<iostream>using namespace std;typedef long long LL;const int mod = 100003;int qmi(int a, LL b)
{LL res = 1;while(b){if(b & 1) res = res * a % mod;b >>= 1;a = (LL) a * a % mod;}return res;
}int main()
{int m;LL n;cin >> m >> n;//                                  +mod防止出现负数情况 cout << (qmi(m, n) - (LL)m * qmi(m - 1, n - 1) % mod + mod) % mod<< endl;//       总分配方案数   -  不会发生越狱的方案数//不会发生越狱时,第一个人随便分配,第二个人信仰为m - 1, 第三个人信仰也为 m - 1 return 0;
}

查看全文

99%的人还看了

相似问题

猜你感兴趣

版权申明

本文"越狱(快速幂C++)":http://eshow365.cn/6-10929-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!