我们知道在计算n! mod pk的时候有这样一个式子,i=1∏n[(i,p)=1]i%pk,这个东西显然是一个以pk为循环节的东西,所以计算的代码如下
for(i=1;i<pk;++i) if(i%p) ans=ans*i%pk;
ans=power(ans,n/pk,pk);
for(i=1;i<=n%pk;++i) if(i%p) ans=ans*i%pk;
但是如果把它修改成以p为循环节去计算即
for(i=1;i<p;++i) if(i%p) ans=ans*i%pk;
ans=power(ans,n/p,pk);
for(i=1;i<=n%p;++i) if(i%p) ans=ans*i%pk;
依旧能够通过这道题目,但是很显然这是错误的计算方法,似乎随便造一组数据就卡掉了。
请求加强数据@memset0