有关题目难度
查看原帖
有关题目难度
1199908
GeXiaoWei楼主2024/4/28 22:01

这叫绿?约分+欧拉筛=AC

#include<bits/stdc++.h>
using namespace std;
int t,a[100005],n,r,o,mod,prime[100005];
long long ans=1;
bool vis[100005];
void f(){
	for(int i=2;i<=1e5;i++){
		if(!vis[i]) prime[o++]=i;
		for(int j=0;j<o&&i*prime[j]<=1e5;j++){
			vis[i*prime[j]]=1;
			if(i%prime[j]==0) break;
		}
	}
}
void d(int nn,int t){
	for(int m=0;prime[m]<=nn;m++) while(nn%prime[m]==0&&nn!=1) nn/=prime[m],a[prime[m]]+=t;
}
int main(){
	scanf("%d",&t);f();
	while(t--){	
		scanf("%d%d%d",&r,&n,&mod);
		memset(a,0,sizeof(a));n+=r,ans=1;
		for(int i=n-r+1;i<=n;i++) d(i,1);
		for(int j=r;j>1;j--) d(j,-1);
		for(int i=0;i<o;i++) while(a[prime[i]]--) ans=ans*prime[i]%mod;
		printf("%d\n",ans);
	}
	return 0;
} 
2024/4/28 22:01
加载中...