지식 : 조합의 수

1. 조합의 역수를 해결

대상 : C를 얻었다 (N, M) % p는 소수이고, P!

방법 : 페르마의 작은 정리 역 위안

이 때문에, 필름의 특성 (a / b) %의 (C)로서, 분할에 적합한 그러한 아니다

우리 B % C를 반전 소자 (D)을 알고있는 경우에는, 문제가로 변환 될 수있다 : (a *의 d) % C = ((a %의 C) * (b %의 온도)) %의 C;

페르마의 작은 정리를 고려 :

^ P-1 = 1 (MOD P)

분명히이 있습니다 :

A * A를 ^ 2 = P-1 (MOD P)

그리고 나서, P ^ 2는 P 의미에서 상기 필름의 역이다

당신은 빠른 전력의 사용을 찾을 수 있습니다!

그럼 각각 N! 모듈러 곱셈 한 후, 그 반대를 측정 할 수 있고, 전처리 m! (㎚)를! 필요!

2.Number 일반 식 :

C (N, M) = C (N, ㎚);

C (N, M) = C (N-1, m-1) + C (N-1, m);

따라서, 모든 조합의 개수는 선형 회귀를 달성 할 수있다!
또한 미리 아에주의!

C (0, I) = C (1,1) = 1;

C (0,0) = 0;

몇 가지 문제의 P2822 조합

#INCLUDE <cstdio>
네임 스페이스를 사용하여 표준;
CONST의 INT에서 N = 2,001, M = 2,001;
INT C [N] [M], ANS [N] [M], N, M, T, K;
인라인 INT 분 INT (X, Y의 INT)
{
X <Y를 반환 X : Y를,?
}
INT의 main ()
{
는 scanf ( "%의 D % d에"& T, K);
C [0] [0] = (C)의 [1] [0] = (C)의 [1] [1] = 1;
경우 (; 나는 <= 2000, I = 2 int로 난 ++)
{
C를 [I] [0] = 1;
(; J <= 2000; INT의 J = 1 J ++)에 대한
{
C [I] [J] = (C [I-1] [J-1] + C [I-1] [J]) % K;
ANS [I] [J]의 ANS = [I-1] [J] + ANS [I] [J-1] -ans [I-1] [J-1];
만약 ANS [I] [J] ++ (c [i]는 [J]!);
}
ANS [I] [I + 1] = ANS의 [I] [I];
}
에 대해 INT (I = 1; I <= T; 내가 ++)
{
는 scanf ( "% d 개 %의 D", 및 N, m);
(m> n)의 경우
의 printf ( "가 % d \ 없음" ANS [N] [N]);
그렇지 않으면
의 printf ( "% D \ 없음", ANS [N] [m]);
}
0을 반환;
}

추천

출처www.cnblogs.com/little-cute-hjr/p/11787646.html