임의의 모드 NTT
                                            
 61442 단어  NTT
                    
할 줄 모르다
원래 3 모드 NTT 를 쓰 려 고 했 는데 상수 가 너무 큰 것 을 발 견 했 습 니 다. 어떻게 최적화 해 야 할 지 모 르 겠 으 니 해체 계수 FFT 를 쓰 세 요.
먼저 간단 한 방법 은 바로 FFT 에서 long double 을 운전 하여 달 리 는 것 이다. 정밀도 가 매우 심각하게 떨 어 진 것 을 발견 하고 (당직 구역 이 long long 보다 크다) 어떻게 해결 할 것 인 가 를 고려 하 는 것 이다.
bitset 를 배 운 경험 을 통 해 우 리 는 자 리 를 낮 춰 야 한 다 는 것 을 알 고 있다.
해체 계수 고려
다항식 A ∗ B 를 가정 하면 모 수 는 P A * B 이 고 모 수 는 P A ∗ B 이 며 모 수 는 P 이다.
상수 C 를 확인 하려 면 보통 2 15 = 32, 768 또는 P 로 상수 C 를 확인 하 십시오. 보통 2 ^ {15} = 32, 768 또는 \ sqrt {P} 상수 C 를 확인 하려 면 보통 215 = 32, 768 또는 P 입 니 다.
A i 를 a i * 8727 ° C + b i 로 뜯 는 것 을 고려 하여 Ai 분해 ai *C+b_i. Ai 를 ai * 8727 ° C + bi 로 뜯 고 B i 를 c * 8727 ° C + d 로 뜯 고 Bi 분해 ci *C+d_i. Bi 를 ci ∗ C + di 즉 A i = a i ∗ C + b i A 로 뜯 어 낸다.i = a_i *C+b_i Ai=ai∗C+bi B i = c i ∗ C + d i B_i = c_i *C+d_i Bi = ci ∗ C + di 는 두 개의 수 X, Y X, Y X, Y 곱 하기 를 고려한다
설정 X = a ∗ C + b 설정 X = a * C + b 설정 X = a * C + b 설정 X = a * C + b Y = c ∗ C + d Y = c * C + d Y = c * C + d Y = c ∗ C + d X ∗ Y = (a \8727C + b) ∗ (c \8727C + d) X * Y = (a * C + b) X * Y = (a * C + b) * C + b) * (c * C + b) * (c * C + d) * C + d) X * C + d) X \8727Y = (a * C + b) \8727C + b) ∗ (c + C + d) C + d) X * C + b) * (c * C + b) = a c ∗ C 2 + (a d + b c) C + b d = ac * C ^ 2 + (ad + bc) C + bd = ac ∗ C2 + (ad + bc) C + bd 발견 C 는 상관 하지 않 고 a c, a d + b c, b d ac, ad + bc, bd ac, ad + bc,bd 다음 에 a, b, c, d a, b, c, d a, b, c, d 를 각각 값 (DFT) 을 구하 고 곱 한 다음 에 a c, a d + b c, b d ac, ad + bc, bd ac, ad + bc, bd 를 삽입 값 (IDFT) 으로 하면 됩 니 다. 모두 4 번 DFT + 3 번 IDFT = 7 번 FFT 상수 가 큽 니 다.
처음에는 허수 부가 사용 되 지 않 았 음 을 발 견 했 습 니 다. FFT 3 차 변 2 차 의 최적화 를 참고 하여 이것 이 가능 한 지 시험 해 보 세 요.
설정 X = a + b i 설정 X = a + bi 설정 X = a + bi Y = c + d i Y = c + di Y = c + di
X ∗ Y = ( a + b i ) ∗ ( c + d i ) = a c − b d + ( b c + a d ) i X*Y=(a+bi)*(c+di)=ac-bd + (bc+ad)i X∗Y=(a+bi)∗(c+di)=ac−bd+(bc+ad)i
거위 와 우리 가 요구 하 는 a c, b d, a d + b c ac, bd, ad + bc ac, bd, ad + bc 는 현재 a d + b c ad + bc ad + bc 가 나 왔 습 니 다.
어떻게 두 개 를 구 할 것 인 가 를 고려 하 다.
설정 X ′ = a − b i 설정 X '= a - bi 설정 X ′ = a - bi 설정 X ′ = a − bi Y = c + d i Y = c + di Y = c + di X ′ ′ ∗ Y = (a − b i) ∗ (c + d i) = a c + b d + (a d − b c) i X' * Y = (a - bi) * (c + di) * (c + (c + di) = ac + bd + (ad - bd + (ad - bc) i X ′ (ad - bc) i X ′ ∗ Y = (a - bi) ∗ (c + di) = ac + bd + bd + (ad - bd + (ad - bc) i) i X ′ Y = (a - bc) i
그리고 실수 부 를 알 게 되 었 고 실수 부 를 알 게 되 었 습 니 다. 그리고 실수 부 ac + bd 의 값 의 값 을 알 게 되 었 습 니 다. 위의 a c - b d 의 값 을 결합 하면 a c 와 b d 를 구 할 수 있 습 니 다. 위의 ac - bd 의 값 을 결합 하면 ac - bd 의 값 을 구 할 수 있 습 니 다. 이렇게 하면 X, Y 만 사용 하 는 것 같 습 니 다.X ′ 이러 면 X, Y, X '이러 면 X, Y, X ′ 에 만 3 번 값 구하 기 (DFT) 하고 X ∗ Y, X ′ ∗ Y 에 X * Y, X' * Y 에 X ∗ Y, X ′ ∗ Y 에 두 번 삽입 하면 돼.
그 러 니까 총 5 번.
my y 는 4 번 의%%%%% orz 가 있다 고 합 니 다.
code:
#include감동
임 의 모드 다항식 구 역
code:
#include이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
임의의 모드 NTT설정 X = a ∗ C + b 설정 X = a * C + b 설정 X = a * C + b 설정 X = a * C + b Y = c ∗ C + d Y = c * C + d Y = c * C + d Y = c ∗ C ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.