O(n) 곱셈 역원
inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
전제는 모수이고 MOD는 질수여야 돼요.
코드로 작성된 것은 다음과 같습니다.
inv[1]=1;
for(int i=2;i<MOD;i++)
inv[i]=(MOD-MOD/i)*inv[MOD%i]%MOD;
시간의 복잡도는 O(n)이다. 즉, 한 번 훑어보면 [1,n] 범위 내의 모든 수의 역원을 구할 수 있다.(n
#include
#include
#define LL long long
#define MOD
using namespace std;
LL fac[200000],inv[200000],p;
void op(){
fac[0]=1,inv[1]=1,inv[0]=1;
for(int i=1;i<=p;i++)fac[i]=(fac[i-1]*i)%p;
for(int i=2;i// i!
// , i!
}
LL C(LL n,LL m){
if(m>n)return 0;
if(m
return fac[n]*inv[n-m]%p*inv[m]%p;
return C(n%p,m%p)*C(n/p,m/p)%p;
}
int main(){
LL n,m;
scanf("%lld%lld%lld",&m,&n,&p);
op();//
printf("%lld",(C(m+n,m)+p)%p);
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[HDU 5608] functionProblem Description There is a function f(x),which is defined on the natural numbers set N,satisfies the following eqaut...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.