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)
麻瓜题,然而WA了n发,关键是可能直接算出来答案为负,记得%mod+mod就好了。公式m^n-(m-1)^(n-1)
#include <cstdio>
#define LL long long
#ifdef WIN32
#define AUTO "%I64d"
#else
#define AUTO "%lld"
#endif
const int MOD = 100003;
LL m,n,ans;
LL powermod(LL a, LL b) {
LL ans = 1, tmp = a%MOD;
while(b > 0) {
if(b&1) ans = (ans*tmp%MOD)%MOD;
b >>= 1; tmp = (tmp*tmp)%MOD;
}
return ans;
}
int main() {
scanf(AUTO""AUTO,&m,&n);
ans = powermod(m, n);
ans = ans-m*powermod(m-1, n-1)%MOD;
printf(AUTO, ans < 0 ? ans+MOD : ans);
return 0;
}