0
두 개의 큰 숫자 (< 10^9) n
과 m
이 있습니다. 대답이 너무 크면 (10^9+7)
에서 모듈러스를 얻어야합니다. [(n-1+m)!]/[(n-1)!*m!]
을 계산해야합니다. (예 : n이 mod보다 너무 큰 경우 n % mod).큰 숫자를 가진 분수의 모듈러스를 계산하십시오.
다음과 같이 계산했습니다.
long up=1;
for (long i = a+b-1; i>=Math.max(a, b); i--) {
up*=i%mod;
}
up=up%mod;
long down=1;
for (long i = Math.min(a, b); i>0; i--) {
down*=i%mod;
}
다음
System.out.println((up%mod/down%mod)%mod);
이 정확이 접근됨에 응답을 출력 (I는 상반부와 하반부를 개별적으로 계산). 올바른 출력을 제공합니까? 내가 (a*b*c)%d == [(a%d)*(b%d)*(c%d)]%d
그래서 [a/b]%d
을 계산하는 그런 어떤 방법이 (내가 틀렸다면 정정 해줘을) 알고
? 이 재귀 위
(n - 1 + m, m) % MOD = ((n - 2 + m, m - 1) % MOD + (n - 2 + m, m) % MOD) % MOD
사용됩니다
결과가 정수라고 생각하기 때문에 나누기를 명시 적으로 계산할 필요가 없다고 생각합니다. 수학을 계산하고 명시 적 제품을 작성한 다음 (모듈로 곱하기 사용) 필요할 수 있습니다. –
사실 이진수 [계수] (http://en.wikipedia.org/wiki/Binomial_coefficient)는 정수입니다. 위키피디아에서 설명한 방법 중 하나를 사용할 수 있습니다 (곱셈 공식 참조). –