线性筛因数个数
Posted PPL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性筛因数个数相关的知识,希望对你有一定的参考价值。
讲解
我们只需要知道这样一件事:
如果一个数 \\(n=\\prod p_i^{c_i}\\)。
那么因数个数 \\(d_n=\\prod(c_i+1)\\)。
代码
int prime[MAXN],pn,f[MAXN],g[MAXN];
bool vis[MAXN];
void sieve(int x)
{
for(int i = 2;i <= x;++ i)
{
if(!vis[i]) prime[++pn] = i,f[i] = 2,g[i] = 1;
for(int j = 1;j <= pn && i * prime[j] <= x;++ j)
{
vis[i * prime[j]] = 1;
if(i % prime[j] == 0)
{
g[i * prime[j]] = g[i] + 1;
f[i * prime[j]] = f[i] / (g[i]+1) * (g[i]+2);
break;
}
g[i * prime[j]] = 1;
f[i * prime[j]] = f[i] * 2;
}
}
}
以上是关于线性筛因数个数的主要内容,如果未能解决你的问题,请参考以下文章