@@ -11,6 +11,7 @@ namespace cp_algo::math::fft {
11
11
struct dft {
12
12
cvector A, B;
13
13
static base factor, ifactor;
14
+ using Int2 = base::Int2;
14
15
static bool init;
15
16
static int split;
16
17
@@ -28,7 +29,7 @@ namespace cp_algo::math::fft {
28
29
auto ai = i < size (a) ? (a[i] * mul).rem_direct () : 0 ;
29
30
auto rem = ai % split;
30
31
auto quo = (ai - rem) / split;
31
- return std::pair{rem, quo};
32
+ return std::pair{(ftype) rem, (ftype) quo};
32
33
};
33
34
auto [rai, qai] = splt (i, cur);
34
35
auto [rani, qani] = splt (n + i, cur * step);
@@ -91,15 +92,15 @@ namespace cp_algo::math::fft {
91
92
auto Ai = A.get (i) * rt;
92
93
auto Bi = B.get (i) * rt;
93
94
auto Ci = C.get (i) * rt;
94
- int64_t A0 = llround (real (Ai));
95
- int64_t A1 = llround (real (Ci));
96
- int64_t A2 = llround (real (Bi));
95
+ Int2 A0 = llround (real (Ai));
96
+ Int2 A1 = llround (real (Ci));
97
+ Int2 A2 = llround (real (Bi));
97
98
res[i].setr_direct (base::m_reduce (A0 + A1 * split + A2 * splitsplit));
98
99
res[i] *= cur;
99
100
if (n + i < k) {
100
- int64_t B0 = llround (imag (Ai));
101
- int64_t B1 = llround (imag (Ci));
102
- int64_t B2 = llround (imag (Bi));
101
+ Int2 B0 = llround (imag (Ai));
102
+ Int2 B1 = llround (imag (Ci));
103
+ Int2 B2 = llround (imag (Bi));
103
104
res[n + i].setr_direct (base::m_reduce (B0 + B1 * split + B2 * splitsplit));
104
105
res[n + i] *= cur * step;
105
106
}
0 commit comments