의 구덩이 BSGS에 대한 첫 번째 이야기 :
식 ^ x≡B MOD (P) 용액
특별 판사 물건이 필요 =>를 % 포인트 ==의 B % 포인트 == 0?
그들은 다음 풋 ( "1")와 그 반대의 경우도 마찬가지 해결책 동일한 경우.
%의 p = 0, 다음 항목이 잘못된 BSGS 알고리즘의 결과로 이동할 수없는 경우로 인해
주제 속으로 :
커틀러 다수 (C (2 * N, N) / (N + 1))을 케이스 (1)의 시퀀스 번호 0>에서 임의의 위치를 처리 01. .
그러나이 중요하다, 정의는 쓸모가 알고있는 테이블에 충돌 법을 찾을 수 있습니다.
next_permutation, 검색 및 기타 도구를 찾는 여러 좋은.
처음 몇 레어 번호 기억 : 1251442132429합니다. (어쨌든, 당신은 단지 이러한 항목을 찾을 수 있습니다)
찾기위한 방법으로 가장 간단하고, 계수의 첫 번째는 루카스, 모듈하지 높은 정밀도를 사용할 수 있습니다.
다른 고정밀처럼 동물 뿐만 아니라 높은 정밀도를 공격, 품질 요소의 분해를 좋아하지 않아, 데이터는 작은 O (N ^ 2) 열거 할 수있다.
소인수로 코드에 대해 게시 됨 :
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #INCLUDE <cstdio> 2 #INCLUDE <iostream> 3 사용 스페이스 성병; 4 #DEFINE MAXN 4,000,005 5 INT 프라임 [MAXN, TOT, N, frpr [MAXN] FENZI [MAXN, tot1; (6) 보이드 프리 () 7 { 8 대 ( int로 I = 2 ; 나는 = < 2 * N; ++ i가 ) 9 { 10 의 경우 (! frpr [I]) 11 { 12 frpr [I] = I; 13 프라임 [++ TOT = I; (14) } 15 대 ( INT J = 1 ; J <= TOT, J ++ ) 16 { 17 일 경우 (프라임 [J] * I> 2 * N) 체류 ; 18 frpr [프라임 [J] * I = 프라임 [J] 19 의 경우 ((I %의 프라임 [J])!) 파괴 ; 20 } 21 } 22 창 ; 23 } 24 무효 Get_pr ( INT의 X, INT의 최적화) 25 { 26 일 동안 (X! = 1) 27 { 28 일 경우 (최적화 된 == 0 ) FENZI [frpr [X] ++ ; 29 다른 FENZI [frpr의 [X] - ; 30 X / = frpr [X]; 31 } 32 창 ; 33 } 34 INT 의 main () 35 { 36 INT의 P, ANS = 1 ; 37 는 scanf ( " %의 D % d에 " , 및 N, P); 38 사전 (); (39) 에 대한이 ( int로 I = N + 2 , I <= 2* N, I는 Get_pr (I) + + 0 ); (40) 에 대한이 ( int로 I = 1 Get_pr (I 내가 ++; i가 N = <) 1 ); (41) 에 대한이 ( int로 I = 1 ; I <= TOT; 내가 ++ ) 42 { 43 동안 (FENZI [프라임 [내가]> 0 ) 44 { 45 ANS = 1ll * ANS * 프라임 [I] %의 P를; 46 FENZI [프라임 [I] - ; 47 } 48 } 49 COUT << ANS << ENDL; 50 반환 0 ; 51 }
두 prufer 순서
N은 N 2 노드 별 포인트 기준은 트리 prufer 시퀀스를 입증 할 수 있고, 대응하는 트리가 고유하게 결정된다 나타낸다.
우리는 몇 가지 이유를 얻을 수 있습니다 :
1. N UNROOTED 트리를 구성하는 도트의 수 : N ^ (N-2)
2. 각각 D1을 차수 N 포인트를 결정 D2 ... 나무 뿌리 개수 (N-2) / ((d1-1) * (d2-1)! * ...)!
3. N 점 뿌리 트리 참조 번호를 가지고 N * ^ N (N-2) ^ N = (N-1)
4. 모든 노드의 정도와 N * 2-2
나무의 수, 다른 어떤 계산뿐만 아니라. . . 그것은 결여 ( 들어는 폭력 열거를 최적화)