就是个很简单的题,比赛的时候很多队都没有想到m=2的特殊情况,哈,还好我们一WA就发现了,好多队一直狂WA,后来还过来问到底怎么回事。 m<2和n<m时,ans=m^n,否则ans=m!+m #include<cstdio> #include<cstring> using namespace std; const long long mod=987654321; int main() { int i,j,n,m; long long ans,tmp; while (scanf("%d%d",&n,&m)&&(n+m)>0){ if (m<=2||n<m){//m^n ans=m; for (i=1;i<n;i++) ans=(ans*m)%mod; } else {//m!+m ans=1; for (i=2;i<=m;i++) ans=(ans*i)%mod; ans+=m; } printf("%I64d/n",ans); } return 0; }