bzoj 1008: [HNOI2008]越狱 数学

1008: [HNOI2008]越狱

Time Limit: 1 Sec  Memory Limit: 162 MB
[Submit][Status][Discuss]

Description

  监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果
相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱

Input

  输入两个整数M,N.1<=M<=10^8,1<=N<=10^12

Output

  可能越狱的状态数,模100003取余

Sample Input

2 3

Sample Output

6

HINT

 

  6种状态为(000)(001)(011)(100)(110)(111)

显然:总共M^N的方案;

   不能越狱的方案即M*(M-1)^(N-1);

        第一个有M种,后面全是M-1种;

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pi (4*atan(1.0))
const int N=1e5+10,M=4e6+10,inf=1e9+10;
const ll INF=1e18+10;
ll quickpow(ll a,ll b,ll mod)
{
    ll sum=1;
    while(b)
    {
        if(b&1)
        {
            sum*=a;
            sum%=mod;
        }
        b>>=1;
        a*=a;
        a%=mod;
    }
    return sum;
}
int main()
{
    ll x,y,z,i,t;
    while(~scanf("%lld%lld",&x,&y))
    {
        ll ans=quickpow(x,y,100003LL)-x*quickpow(x-1,y-1,100003LL);
        printf("%lld\n",((ans%100003)+100003)%100003);
    }
    return 0;
}

 

posted @ 2016-08-29 10:56  jhz033  阅读(79)  评论(0编辑  收藏