@@ -82,7 +82,7 @@ namespace cp_algo::math::fft {
8282 }
8383
8484 void recover_mod (auto &&C, auto &res, size_t k) {
85- assert ( size (res) % flen == 0 );
85+ res. assign ((k / flen + 1 ) * flen, base ( 0 ) );
8686 size_t n = A.size ();
8787 auto splitsplit = base (split * split).getr ();
8888 base b2x32 = bpow (base (2 ), 32 );
@@ -106,7 +106,7 @@ namespace cp_algo::math::fft {
106106 Au = montgomery_mul (Au, mul, mod, imod);
107107 Au = Au >= base::mod () ? Au - base::mod () : Au;
108108 for (size_t j = 0 ; j < flen; j++) {
109- res[i + j].setr (Au[j]);
109+ res[i + j].setr (typename base::UInt ( Au[j]) );
110110 }
111111 };
112112 set_i (i, Ax, Bx, Cx, cur);
@@ -115,6 +115,7 @@ namespace cp_algo::math::fft {
115115 }
116116 cur = montgomery_mul (cur, step4, mod, imod);
117117 }
118+ res.resize (k);
118119 checkpoint (" recover mod" );
119120 }
120121
@@ -138,13 +139,13 @@ namespace cp_algo::math::fft {
138139 mul (cvector (B.A ), B.B , res, k);
139140 }
140141 std::vector<base, big_alloc<base>> operator *= (dft &B) {
141- std::vector<base, big_alloc<base>> res ( 2 * A. size ()) ;
142- mul_inplace (B, res, size (res ));
142+ std::vector<base, big_alloc<base>> res;
143+ mul_inplace (B, res, 2 * A. size ());
143144 return res;
144145 }
145146 std::vector<base, big_alloc<base>> operator *= (dft const & B) {
146- std::vector<base, big_alloc<base>> res ( 2 * A. size ()) ;
147- mul (B, res, size (res ));
147+ std::vector<base, big_alloc<base>> res;
148+ mul (B, res, 2 * A. size ());
148149 return res;
149150 }
150151 auto operator * (dft const & B) const {
@@ -191,13 +192,11 @@ namespace cp_algo::math::fft {
191192 std::min (k, size (a)) + std::min (k, size (b)) - 1
192193 ) / 2 );
193194 auto A = dft<base>(a | std::views::take (k), n);
194- a.assign ((k / flen + 1 ) * flen, 0 );
195195 if (&a == &b) {
196196 A.mul (A, a, k);
197197 } else {
198198 A.mul_inplace (dft<base>(b | std::views::take (k), n), a, k);
199199 }
200- a.resize (k);
201200 }
202201 void mul (auto &a, auto const & b) {
203202 size_t N = size (a) + size (b) - 1 ;
0 commit comments