codevs1851 越狱

来源:互联网 发布:李贞贤阿里阿里百度云 编辑:程序博客网 时间:2024/06/05 16:34
题目描述 Description

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

输入描述 Input Description

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

输出描述 Output Description

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

样例输入 Sample Input

2 3

样例输出 Sample Output

6

数据范围及提示 Data Size & Hint

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

#include <stdio.h>#include <algorithm>using namespace std;long long u=100003;long long pow(long long a,long long b){if(b==0) return 1;else if(b==1) return a%u;else{long long ans=pow(a,b/2);ans=(ans*ans)%u;if(b%2) ans=(ans*a)%u;return ans%u;}}int main(){long long n,m;scanf("%lld%lld",&m,&n);printf("%lld",(pow(m,n)%u-(pow(m-1,n-1)*m)%u+u)%u);return 0;}

0 0