越狱
// 越狱.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
/*
http://ybt.ssoier.cn:8088/problem_show.php?pid=1618
https://loj.ac/p/10196
原题来自:HNOI 2008
监狱有连续编号为 1 到 n 的 n 个房间,每个房间关押一个犯人。有 m 种宗教,每个犯人可能信仰其中一种。
如果相邻房间的犯人信仰的宗教相同,就可能发生越狱。求有多少种状态可能发生越狱。
【输入】
输入两个整数 m 和 n。
【输出】
可能越狱的状态数,对 100003 取余。
【输入样例】
2 3
【输出样例】
6
【提示】
样例说明
所有可能的 6 种状态为:{0,0,0},{0,0,1},{0,1,1},{1,0,0},{1,1,0},{1,1,1}。
数据范围与提示:
对于全部数据,1≤m≤108,1≤n≤1012 。
*/
#include <iostream>
using namespace std;
long long m, n;
const int MOD = 100003;
long long fastmi(long long a, long long b, long long MOD) {
long long res = 1;
while (b) {
if (b & 1) {
res *= a;
res %= MOD;
}
a *= a; a %= MOD;
b >>= 1;
}
return res;
}
int main()
{
cin >> m >> n;
//m^n - m*((m-1)^(n-1))
long long res = fastmi(m, n, MOD) - m * fastmi(m - 1, n - 1, MOD);
res = (res % MOD + MOD) % MOD;
cout << res << endl;
return 0;
}
作 者: itdef
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力
欢迎转帖 请保持文本完整并注明出处
技术博客 http://www.cnblogs.com/itdef/
B站算法视频题解
https://space.bilibili.com/18508846
qq 151435887
gitee https://gitee.com/def/
欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
如果觉得不错,欢迎点赞,你的鼓励就是我的动力

