NC50551. 越狱
描述
输入描述
输入两个整数m和n。
输出描述
可能越狱的状态数,对100003取余。
示例1
输入:
2 3
输出:
6
说明:
所有可能的6种状态为:{0,0,0 }, {0,0,1 }, {0,1,1 }, {1,0,0 }, {1,1,0 }, {1,1,1 }。C++14(g++5.4) 解法, 执行用时: 4ms, 内存消耗: 488K, 提交时间: 2019-08-21 09:07:55
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll ksm(ll x,ll y,ll mod){ ll res=1; while(y){ if(y&1) res=res*x%mod; x=x*x%mod; y>>=1; } return res; } int main(){ ll n,m; scanf("%lld%lld",&m,&n); ll t=ksm(m,n,100003); t=(t-m*ksm(m-1,n-1,100003)%100003+100003)%100003; printf("%lld\n",t); }
C++11(clang++ 3.9) 解法, 执行用时: 3ms, 内存消耗: 384K, 提交时间: 2020-10-19 21:54:30
#include<bits/stdc++.h> #define LL long long using namespace std; const LL mod=100003; LL qpow(LL x,LL y){LL res=1;for(;y;y>>=1,x=x*x%mod)if(y&1)res=res*x%mod;return res;} int main(){ LL n,m;scanf("%lld%lld",&m,&n); printf("%lld\n",(qpow(m,n)-m*qpow(m-1,n-1)%mod+mod)%mod); return 0; }
pypy3(pypy3.6.1) 解法, 执行用时: 38ms, 内存消耗: 18744K, 提交时间: 2020-09-01 19:42:43
m,n = map(int,input().split()) print((pow(m,n,100003) - m*pow(m-1,n-1,100003)+100003)%100003)
Python3 解法, 执行用时: 44ms, 内存消耗: 6876K, 提交时间: 2021-05-25 20:43:52
m,n=map(int,input().split()) print((pow(m,n,100003)-m*pow(m-1,n-1,100003))%100003)