建议加强数据?
查看原帖
建议加强数据?
239287
DarthVictor楼主2020/9/26 20:05

题目并没有保证rr大于nnmm,而rr小于nnmm时由于逆元的一些问题许多做法会炸,比如下面这个:

#include<bits/stdc++.h>
using namespace std;
#define re register
typedef long long ll;
const int maxn=1e7+3;
int n,m,t,r,tot,prime[maxn],fac[maxn],sum[maxn],tfac[maxn];
bool he[maxn];
void get_prime(){
	he[1]=1;
	for(re int i=2;i<=maxn-3;i++){
		if(!he[i]) prime[++tot]=i;
		for(re int j=1;j<=tot&&i*prime[j]<=maxn-3;j++){
			he[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		}
	}
}
int power(int a,int b){
	int res=1;
	while(b){
		if(b&1) res=1LL*res*a%r;
		b>>=1;
		a=1LL*a*a%r;
	}
	return res;
}
int main(){
	get_prime();
	scanf("%d%d",&t,&r);
	fac[0]=tfac[0]=1;
	for(re int i=1;i<=maxn-3;i++) fac[i]=1LL*fac[i-1]*i%r;
	sum[1]=1;
	for(re int i=2;i<=maxn-3;i++) sum[i]=(he[i]?sum[i-1]:1LL*sum[i-1]*(i-1)%r*power(i,r-2)%r);
	while(t--){
		scanf("%d%d",&n,&m);
		int ans=1LL*fac[n]*sum[m]%r;
		printf("%d\n",ans);
	}
	return 0;
}
/*
HACK:
1 7
11 8
*/

然而题目并没有卡???

2020/9/26 20:05
加载中...