<span>素数欧拉筛法</span>

线性筛素数

int pnum=0;
int pa[maxn];
bool pvis[maxn];
void prime_init()
{
	memset(pvis,0,sizeof(pvis));
	FOR(i,2,MAX)
	{
		if (!pvis[i])
		{
			pvis[i]=1;
			pnum++;
			pa[pnum]=i;			
		}
		FOR(j,1,pnum) if (pa[j]*i<=MAX)
		{
			pvis[pa[j]*i]=1;
			if (i%pa[j]==0) break;
		}else break;
	}
}

莫比乌斯

int pnum=0;
int pa[maxn];
int mu[maxn];
bool pvis[maxn];
void mobius_init()
{
	mu[1]=1;
	memset(pvis,0,sizeof(pvis));
	FOR(i,2,MAX)
	{
		if (!pvis[i])
		{
			pvis[i]=1;
			pnum++;
			pa[pnum]=i;		
			mu[i]=-1;
		}
		FOR(j,1,pnum) if (pa[j]*i<=MAX)
		{
			pvis[pa[j]*i]=1;
			if (i%pa[j]==0)
			{
				mu[i*pa[j]]=0;
				break;
			}
			else
			{
				mu[i*pa[j]]=-mu[i];
//				break;
			}
		}
	}
}
全部评论

相关推荐

12-03 03:32
安徽大学 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务