蒟蒻在做 P1919 【模板】A*B Problem 升级版(FFT 快速傅里叶变换) 这题时遇到一个关于static修饰符的问题:
在NTT时:
void NTT(int *g, bool fl, int n)
{
tsetup(n);
static ull f[MAXN << 1], w[MAXN << 1] = {1};//就是这里
for (int i = 0; i < n; i++)
f[i] = (((ll)MOD << 5) + g[tr[i]]) % MOD;
for (int len = 1; len < n; len <<= 1)
{
ull rt = fpow(fl ? _G : invG, (MOD - 1) / (len << 1));
for (int i = 1; i < len; i++)
w[i] = w[i - 1] * rt % MOD;
for (int p = 0; p < n; p += (len << 1))
for (int cur = 0; cur < len; cur++)
{
int t = w[cur] * f[p | len | cur] % MOD;
f[p | len | cur] = f[p | cur] + MOD - t;
f[p | cur] = f[p | cur] + t;
}
if (len == (1 << 10))
for (int i = 0; i < n; i++)
f[i] %= MOD;
}
if (fl)
for (int i = 0; i < n; i++)
g[i] = f[i] % MOD;
else
{
ull invn = inv(n);
for (int i =0; i < n; i++)
g[i] = f[i] % MOD * invn % MOD;
}
}
oid NTT(int *g, bool fl, int n)
{
tsetup(n);
ull f[MAXN << 1], w[MAXN << 1] = {1};//还是这里
for (int i = 0; i < n; i++)
f[i] = (((ll)MOD << 5) + g[tr[i]]) % MOD;
for (int len = 1; len < n; len <<= 1)
{
ull rt = fpow(fl ? _G : invG, (MOD - 1) / (len << 1));
for (int i = 1; i < len; i++)
w[i] = w[i - 1] * rt % MOD;
for (int p = 0; p < n; p += (len << 1))
for (int cur = 0; cur < len; cur++)
{
int t = w[cur] * f[p | len | cur] % MOD;
f[p | len | cur] = f[p | cur] + MOD - t;
f[p | cur] = f[p | cur] + t;
}
if (len == (1 << 10))
for (int i = 0; i < n; i++)
f[i] %= MOD;
}
if (fl)
for (int i = 0; i < n; i++)
g[i] = f[i] % MOD;
else
{
ull invn = inv(n);
for (int i =0; i < n; i++)
g[i] = f[i] % MOD * invn % MOD;
}
}
有没有大佬知道这是什么原因?