越狱-----------------------------------组合数学(快速幂)

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

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

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

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

输入格式
共一行,包含两个整数 m 和 n。

输出格式
可能越狱的状态数,对 100003 取余。

数据范围
1≤m≤108,
1≤n≤1012
输入样例:
2 3
输出样例:
6
样例解释
所有可能的 6 种状态为:(000)(001)(011)(100)(110)(111)。

解析:
先求一下所有方案数 mn
然后减去不越狱的方案数 m*(m-1)(n-1)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=100003;
ll n,m;
ll quick(ll a,ll b)
{
	ll res=1;
	while(b)
	{
		if(b&1) res=res*a%MOD;
		a=a*a%MOD;
		b>>=1;
	}
	return res;
}
int main()
{
	scanf("%lld %lld",&m,&n);
	cout<<(quick(m,n)%MOD-m*quick(m-1,n-1)%MOD+MOD)%MOD<<endl;
 } 

发布了572 篇原创文章 · 获赞 14 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43690454/article/details/105387385
今日推荐