@[Karry5307](/user/60990) 多项式神仙 /se 快来帮忙啊 /se /qq /se (不是
by MistZero @ 2020-05-21 19:35:45
@[limaopipi2022](/user/160839)
改完的代码:
```cpp
void sqrt(ll*f, int m) {
#define b1 _s4
#define b2 _s5
int i, n, len;
for (n = 1; n < m; n <<= 1);
b1[0] = 1;
for (len = 2; len <= n; len <<= 1) {
for (i = 0; i < (len >> 1); ++i) b2[i] = (b1[i] << 1) % mod;
clr(b2 + len / 2, len / 2);
inv(b2, len);
clr(b1 + len / 2, len / 2);
NTT(b1, 1, len);
times(b1, b1, len);
NTT(b1, 0, len);
for (i = 0; i < len; ++i) b1[i] = (f[i] + b1[i]) % mod;
NTT(b1, 1, len << 1);
NTT(b2, 1, len << 1);
times(b1, b2, len << 1);
NTT(b1, 0, len << 1);
}
cpy(f, b1, m);
clr(b1, n + n);
clr(b2, n + n);
#undef b1
#undef b2
}
```
by 热言热语 @ 2020-05-21 19:47:15
另:函数里开数组时在前面加 `static` 相当于开了只供这个函数使用的全局变量,就不用 `#define` 了。
```cpp
void sqrt(ll* f, int m) {
static ll b1[M], b2[M];
}
```
by 热言热语 @ 2020-05-21 19:50:27
@[热言热语](/user/37132) A了,谢谢
by Prean @ 2020-05-21 19:51:37