本来还想了一会dp……
然而一看数据范围明显是数论……
那么推一推。。
我们发现可以用总方案数减去不会越狱的方案数
那么我们考虑在长度为n的数列中填数
首先第一个位置有m种选择,后面的位置:
总方案:m种;不会越狱:m-1种
快速幂。
1 #include<cstdio> 2 #include<cstring> 3 #define ll long long 4 using namespace std; 5 const ll p=100003; 6 ll n,m; 7 ll read(){ 8 ll sum=0; 9 char ch=getchar(); 10 while (ch<'0'||ch>'9') 11 ch=getchar(); 12 while (ch>='0'&&ch<='9'){ 13 sum=sum*10+ch-'0'; 14 ch=getchar(); 15 } 16 return sum; 17 } 18 ll fast_pow(ll x,ll y){ 19 ll sum=1; 20 while (y){ 21 if (y&1) sum=(sum*x)%p; 22 x=(x*x)%p; 23 y>>=1; 24 } 25 return sum; 26 } 27 int main(){ 28 m=read(); 29 n=read(); 30 printf("%lld",m%p*(fast_pow(m,n-1)-fast_pow(m-1,n-1)+p)%p); 31 return 0; 32 }