这道题我放了好久没有作,就是由于数据太大没什么好方法,直到后来受大神指点才发现,一道数学题被我卡死这么久。ios
这道题的关键就是逆向思惟,所谓逆向思惟就是倒着想,既然题让咱们求越狱的状况数,这个很差求,咱们不妨求一下不越狱的状况数,这样用总数一减便可,根据数学思想,n个房间,m种宗教,则共有m的n次方种总可能数,不越狱的状况有m乘(m-1)的(n-1)次方个,那么结果就是二者相减,可是别急,这样算你依然会错,由于次方运算太慢,因此你还须要用到快速幂。spa
代码以下:code
#include<cstdio> #include<cstdlib> #include<iostream> #define mod 100003 using namespace std; long long int i_kinds,i_room; long long int i_result,i_temp; long long int multiply(long long int a,long long int x) { long long int b=1; while(x>0){ if(x&1){ b=b*a%mod; } a=a*a%mod; x=x>>1; } return b; } int main() { scanf("%lld%lld",&i_kinds,&i_room); i_kinds=i_kinds%mod; i_temp=multiply(i_kinds,i_room)%mod; i_result=i_temp; i_temp=i_kinds*multiply(i_kinds-1,i_room-1)%mod; i_result=i_result+mod-i_temp; i_result=i_result%mod; printf("%lld",i_result); return 0; }