loj 6019

Posted limfc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loj 6019相关的知识,希望对你有一定的参考价值。

挺没意思的题

全都读进去算一个每个阶乘的系数

然后算一遍每个数的系数

最后在质数处算一下答案

#include<bits/stdc++.h>
using namespace std;
#define rep(i,a,b) for(int i=(a),i##_end=(b);i<=i##_end;++i)
#define For(i,a,b) for(int i=(a),i##_end=(b);i<i##_end;++i)
#define per(i,a,b) for(int i=(b),i##_st=(a);i>=i##_st;--i)
#define fi first
#define se second
#define pb push_back
#define mp make_pair
#define dbg(x) cerr<<#x" = "<<x<<endl
#define debug(...) fprintf(stderr, __VA_ARGS__)
#define Es(x,i) for(Edge*i=G[x];i;i=i->nxt)
typedef long long ll;
typedef pair<int,int> pii;
const int inf=~0u>>1,MOD=1e9+7;
char *TT,*mo,but[(1<<15)+2];
#define getchar() ((TT==mo&&(mo=((TT=but)+fread(but,1,1<<15,stdin)),TT==mo))?-1:*TT++)
inline int rd() {
    int x,c,f=1;while(!isdigit(c=getchar()))f=c!=‘-‘;x=c-‘0‘;
    while(isdigit(c=getchar()))x=x*10+c-‘0‘;return f?x:-x;
}
const int N=1e6+1;
int n,P,mod;
int mn[N],p[N],tot;
inline void Init(){
	For(i,2,N){
		if(!mn[i])mn[i]=i,p[++tot]=i;
		for(int j=1,k;j<=tot&&p[j]<=mn[i]&&(k=i*p[j])<N;++j)mn[k]=p[j];
	}
	int y=mod=P;
	for(int i=1;p[i]*p[i]<=y;++i){
		if(y%p[i]==0){
			mod/=p[i],mod*=p[i]-1;
			do y/=p[i];while(y%p[i]==0);
		}
	}
	if(y^1)mod/=y,mod*=y-1;
}
int c[N],a[N],b[N];
inline void mad(int&x,int y){
	x=(x+y>=mod?x+y-mod:x+y);
}
inline int pw(int n,int m){
	int r=1;for(;m;m>>=1,n=(ll)n*n%P)if(m&1)r=(ll)r*n%P;
	return r; 
}
int main(){
#ifdef flukehn
	freopen("test.txt","r",stdin);
#endif
	n=rd(),P=rd();
	Init();
	rep(i,1,n)a[i]=rd();
	rep(i,1,n)b[i]=rd();
	rep(i,1,n)++c[b[i]],--c[a[i]],--c[b[i]-a[i]];
	per(i,2,N-2)c[i]+=c[i+1];
	For(i,2,N)c[i]=(c[i]%mod+mod)%mod;
	ll ans=1;
	per(i,2,N-1)if(c[i]){
		if(mn[i]==i)ans=ans*pw(i,c[i])%P;
		else mad(c[mn[i]],c[i]),mad(c[i/mn[i]],c[i]);
	}
	cout<<ans<<endl;
}

以上是关于loj 6019的主要内容,如果未能解决你的问题,请参考以下文章

hdu 6019

Loj 6285. 数列分块入门 9

loj#2076. 「JSOI2016」炸弹攻击 模拟退火

loj#6281. 数列分块入门 5

loj#2071. 「JSOI2016」最佳团体

网络流 24 题汇总(LOJ 上只有 22 题???)