@@ -24,12 +24,7 @@ namespace cp_algo::math::fft {
24
24
base cur = 1 ;
25
25
cvector::exec_on_roots (2 * n, std::min (n, size (a)), [&](size_t i, auto rt) {
26
26
auto splt = [&](size_t i) {
27
- #ifdef CP_ALGO_FFT_RANDOMIZER
28
27
auto ai = ftype (i < size (a) ? (a[i] * cur).rem () : 0 );
29
- cur *= factor;
30
- #else
31
- auto ai = ftype (i < size (a) ? a[i].rem () : 0 );
32
- #endif
33
28
auto rem = std::remainder (ai, split);
34
29
auto quo = (ai - rem) / split;
35
30
return std::pair{rem, quo};
@@ -38,6 +33,7 @@ namespace cp_algo::math::fft {
38
33
auto [rani, qani] = splt (n + i);
39
34
A.set (i, point (rai, rani) * rt);
40
35
B.set (i, point (qai, qani) * rt);
36
+ cur *= factor;
41
37
});
42
38
checkpoint (" dft init" );
43
39
if (n) {
@@ -98,20 +94,16 @@ namespace cp_algo::math::fft {
98
94
int64_t A1 = llround (real (Ci));
99
95
int64_t A2 = llround (real (Bi));
100
96
res[i] = A0 + A1 * split + A2 * splitsplit;
101
- #ifdef CP_ALGO_FFT_RANDOMIZER
102
97
res[i] *= cur;
103
- #endif
104
98
if (n + i >= k) {
105
99
return ;
106
100
}
107
101
int64_t B0 = llround (imag (Ai));
108
102
int64_t B1 = llround (imag (Ci));
109
103
int64_t B2 = llround (imag (Bi));
110
104
res[n + i] = B0 + B1 * split + B2 * splitsplit;
111
- #ifdef CP_ALGO_FFT_RANDOMIZER
112
105
res[n + i] *= cur * step;
113
106
cur *= ifactor;
114
- #endif
115
107
});
116
108
checkpoint (" recover mod" );
117
109
}
0 commit comments