rt,本人两个代码:
#include<iostream>
using namespace std;
typedef long long ll;
ll t,n,m,p;
ll ksm(ll a,ll b,ll mod){
ll ans=1;
while(b){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
ll C(ll a,ll b,ll mod){
if(a==b)return 1;
b=min(b,a-b);
ll jc=1,jc_b=1;
for(int i=a-b+1;i<=a;i++)jc=jc*i%mod;
for(int i=2;i<=b;i++)jc_b=jc_b*i%mod;
return jc*ksm(jc_b,mod-2,mod)%mod;
}
ll L(ll a,ll b,ll mod){
ll ans=1;
while(a&&b){
ans=ans*C(a%mod,b%mod,mod)%mod;
a/=mod;
b/=mod;
}
return ans;
}
int main(){
cin>>t;
while(t--){
cin>>n>>m>>p;
cout<<L(n+m,n,p)<<endl;
}
return 0;
}
和
#include<iostream>
using namespace std;
typedef long long ll;
ll t,n,m,p;
inline ll ksm(ll a,ll b,ll mod){
ll ans=1;
while(b){
if(b&1)ans=ans*a%mod;
a=a*a%mod;
b>>=1;
}
return ans;
}
ll C(ll a,ll b,ll mod){
if(a==b)return 1;
b=min(b,a-b);
ll jc=1,jc_b=1;
for(int i=a-b+1;i<=a;i++)jc=jc*i%mod;
for(int i=2;i<=b;i++)jc_b=jc_b*i%mod;
return jc*ksm(jc_b,mod-2,mod)%mod;
}
ll lucas(ll a,ll b,ll mod){
ll ans=1;
while(a&&b){
ans=ans*C(a%mod,b%mod,mod)%mod;
a/=mod;
b/=mod;
}
return ans;
}
int main(){
cin>>t;
while(t--){
cin>>n>>m>>p;
cout<<lucas(n+m,n,p)<<endl;
}
return 0;
}
这两个代码测试第一个点最后一个数据时结果一样,但是提交却全WA。
18716 19718 5393
这组数据在下载数据中输出为0,但是经过三个代码测试后都为35,输出为0是因为组合数刚好为P(质数),但是组合数不可能为质数,申请更改。