P3197 [HNOI2008]越狱

题目描述

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

输入输出格式

输入格式:

 

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

 

输出格式:

 

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

 

输入输出样例

输入样例#1: 复制
2 3
输出样例#1: 复制
6

说明

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

 

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define inf 2147483647
const ll INF = 0x3f3f3f3f3f3f3f3fll;
#define ri register int
template <class T> inline T min(T a, T b, T c)
{
    return min(min(a, b), c);
}
template <class T> inline T max(T a, T b, T c)
{
    return max(max(a, b), c);
}
template <class T> inline T min(T a, T b, T c, T d)
{
    return min(min(a, b), min(c, d));
}
template <class T> inline T max(T a, T b, T c, T d)
{
    return max(max(a, b), max(c, d));
}
#define pi acos(-1)
#define me(x, y) memset(x, y, sizeof(x));
#define For(i, a, b) for (int i = a; i <= b; i++)
#define FFor(i, a, b) for (int i = a; i >= b; i--)
#define mp make_pair
#define pb push_back
const int maxn = 100005;
#define mod 100003
// name*******************************
ll m,n;
ll ans;
// function******************************
ll qmul(ll a,ll b)
{
    ll base=a,ans=1;
    while(b)
    {
        if(b&1)
            ans=ans*base%mod;
        base=base*base%mod;
        b>>=1;
    }
    return ans;
}


//***************************************
int main()
{
//    freopen("test.txt","r",stdin);
    cin>>m>>n;
    cout<<(qmul(m,n)%mod-qmul(m-1,n-1)*m%mod+mod)%mod;

    return 0;
}

 

posted @ 2018-03-27 19:15  planche  阅读(131)  评论(0编辑  收藏  举报