luogu P3197 [HNOI2008]越狱 题解(数论)

题目链接:P3197 [HNOI2008]越狱

思路:

这题第一眼看见以为是一个dp,后来发现好像也是道数学题。

我们发现这道题可以来求补集和全集,补集就是没有越狱的情况,第一间房子的情况有M种,那么第二个房间就有M-1种情况,第三个房间也有M-1种情况,所以根据乘法原理没有越狱的情况就有M*\left ( M-1 \right )^{N-1}种。

还可以计算出全集,第一个房间有M种情况,第二个也有M种情况,以此类推还是根据乘法原理我们就会发现全集是M^{N}种。

所以答案就是全集减去补集就是M^{N}-M*(M-1)^{N-1}

注意每次都要模一下,另外开一下long long就mu的问题。。。了? 交了会发现T死……

当然还要快速幂了(我太弱第一次忘了这个)。这次真的没问题了!!!

蒟蒻写的代码:

#include
#include
#include
#include
#include

#define mod 100003
#define Ll long long

using namespace std;

Ll n, m, ans;

Ll power(Ll x, Ll y)
{
	Ll cnt = x;
	y--;
	x %= mod;
	while(y)
	{
		if( y & 1)
			cnt = cnt * x % mod;
		x = x * x % mod;
		y>>=1;
	}
	return cnt % mod;
}

int main( )
{
	scanf("%lld%lld",&m,&n);
	ans = power(m,n)%mod - m*power(m-1,n-1)%mod;
	cout<<(ans%mod+mod)%mod<

 

你可能感兴趣的:(数论)