题目描述
监狱有连续编号为1...N的N个房间,每个房间关押一个犯人,有M种宗教,每个犯人可能信仰其中一种。如果
相邻房间的犯人的宗教相同,就可能发生越狱,求有多少种状态可能发生越狱
输入
输入两个整数M,N.1<=M<=10^8,1<=N<=10^12
输出
可能越狱的状态数,模100003取余
样例输入
样例输出
提示
6种状态为(000)(001)(011)(100)(110)(111)
题解:额,这题也还是比较水的,其实要反着想,思考不越狱的可能情况,所以最终的ans=m^n-m*(m-1)^(n-1),当然啦,这题是要用快速幂以及long long的
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <memory.h>
#include <math.h>
#include <queue>
#include <stack>
#include <map>
#include <vector>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <float.h>
using namespace std;
long long n,m;
long long pow(long long x,long long p){
if(p==0)
return 1;
long long tmp=pow(x,p/2);
if(p%2==1)
return ((tmp*tmp)%100003ll*x)%100003ll;
return (tmp*tmp)%100003ll;
}
int main(){
scanf("%lld %lld",&m,&n);
printf("%lld\n",m*((pow(m,n-1)-pow(m-1,n-1)+100003ll)%100003ll)%100003ll);
return 0;
}