description
给定方程和,
对于:
对于:
问正整数结的个数且(不一定是质数), ,
solution
首先这种解的个数常见插板法套路了。
对于那一类:给减去,即求正整数解的方案数了。
而那一类,又那么小,求的是个条件的交集,直接容斥。
发现逆向才可求,即求满足一些的方案数,回到第二类问题。
容斥枚举集合乘应该都会吧。
毒瘤的是模数不一定是质数,所以要用ex_lucus。(我当然直接贺过来)
ex_lucus还要预处理阶乘,不然会T。
code
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5+5;
const int M=5e6+5;
ll r[M],md[N],a[N],jc[M];
ll ksm(ll t,ll b,ll mod) {
ll mul=1;
for(ll i=b;i;i>>=1) {
if(i&1) mul=mul*t%mod; t=t*t%mod;
}
return mul;
}
ll ex_gcd(ll a,ll b,ll &x,ll &y) {
if(b==0) {x=1; y=0; return a;}
ll d=ex_gcd(b,a%b,x,y);
ll xx=x; x=y; y=xx-a/b*y;
return d;
}
ll inv(ll u,ll p) {
ll v,k,d=ex_gcd(u,p,v,k);
v%=(p/d);
if(v<0) v+=(p/d);
return v;
}
ll fac(ll n,ll pk,ll p) {
if(n==0||n==1) return 1;
return fac(n/p,pk,p)*ksm(jc[pk],n/pk,pk)%pk*jc[n%pk]%pk;
}
ll Cnt(ll n,ll p) {
ll sum=0;
for(ll i=n;i;i/=p) sum+=i/p;
return sum;
}
ll C_modpk(ll n,ll m,ll p,ll pk) {
jc[0]=1;
for(ll i=1;i<=pk;i++)
if(i%p) jc[i]=jc[i-1]*i%pk;
else jc[i]=jc[i-1];
return fac(n,pk,p)*inv(fac(m,pk,p),pk)%pk*inv(fac(n-m,pk,p),pk)%pk*ksm(p,(Cnt(n,p)-Cnt(m,p)-Cnt(n-m,p)),pk)%pk;
}
ll CRT(int tot) {
ll mul=1,sum=0,x,y;
for(int i=1;i<=tot;i++) mul*=md[i];
for(int i=1;i<=tot;i++) {
ll d=ex_gcd(mul/md[i],md[i],x,y);
sum+=(mul/md[i])*x%mul*r[i]%mul%mul,sum=(sum%mul+mul)%mul;
}
return sum;
}
ll ex_Lucas(ll n,ll m,ll P) {
if(n<m) return 0;
int tot=0;
for(ll p=2;p*p<=P;p++) {
ll pk=1;
if(!(P%p)) {
while(!(P%p)) {P/=p; pk*=p; }
md[++tot]=pk; r[tot]=C_modpk(n,m,p,pk);
}
}
if(P>1) {
md[++tot]=P; r[tot]=C_modpk(n,m,P,P);
}
ll ans=CRT(tot);
return ans;
}
int main() {
int T;
ll sum=0,p;
scanf("%d%lld",&T,&p);
while(T--) {
ll n,n1,n2,m,ans;
scanf("%lld%lld%lld%lld",&n,&n1,&n2,&m);
for(int i=0;i<n1+n2;i++) {
scanf("%lld",&a[i]);
if(i>=n1) m-=a[i]-1;
}
ans=ex_Lucas(m-1,n-1,p)%p;
for(int s=1;s<(1<<n1);s++) {
ll cnt=0,tmp=m;
for(int i=0;i<n1;i++) {
if(s&(1<<i)) {
cnt++,tmp-=a[i];
}
}
if(cnt&1) ans-=ex_Lucas(tmp-1,n-1,p);
else ans+=ex_Lucas(tmp-1,n-1,p);
ans=(ans%p+p)%p;
}
printf("%lld\n",(ans%p+p)%p);
}
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
2021-07-13 B - A Simple Task