首页 > 其他 > 详细

线性筛因数个数

时间:2021-05-26 23:24:15      阅读:39      评论:0      收藏:0      [点我收藏+]

讲解

我们只需要知道这样一件事:

如果一个数 \(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;
		}
	}
}

线性筛因数个数

原文:https://www.cnblogs.com/PPLPPL/p/14815167.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!