线性筛1

筛法

线性筛素数

保证每次只被自己最小的质因数筛到。。

void yych()
{
	for(int  i = 2; i <= maxn; i ++)
	{
		if(!vis[i])	prime[++tot] = i;
		for(int j = 1; j <= tot&&i * prime[j] <= maxn; j ++)
		{
			vis[i * prime[j]] = 1;
			if(i%prime[j] == 0)	break;
	     }
}

筛phi

欧拉函数 phi(i) 为小于i 的正整数中与i互质的数的个数, 然后有公式

ϕ(x)=x(11p1)(11p2)...(11pk)

​ 然后考虑怎么筛, 还是分三种情况

1.i是质数 则显然 phi(i)=(i1)

2.i 能整除质数p, 则说明i 中含有p 这个质数, 则后面的质数不会改变,只是在本身上乘上p;

ϕ(i)=i(11p1)(11p2)...(11pk)

ϕ(ip)=ip(11p1)(11p2)...(11pk)

So, phi(ip)=phi(i)p

3.i 不能整除质数p, 说明i中不含p这个因数, 也就是原来多乘了p(11p) , 化简得(p1);

ϕ(i)=i(11p1)(11p2)...(11pk)

ϕ(ip)=ip(11p)(11p1)(11p2)...(11pk)

=i(p1)(11p1)(11p2)...(11pk)

So, phi(ip)=phi(i)(p1);

void yych()
{
	phi[1] = 1;
	for(int  i = 2; i <= maxn; i ++)
	{
		if(!vis[i])
		{
			prime[++tot] = i;
			phi[i] = (i-1);
		}
		for(int j = 1; j <= tot&&prime[j]*i <= maxn; j ++)
		{
			vis[i * prime[j]] = 1;
			if(i%prime[j] == 0)
			{
                  phi[i * prime[j]] = phi[i] * prime[j];
				break;
			}
			else
				phi[i * prime[j]] = phi[i] * (prime[j] - 1);
		}
	}
}

筛mu

可以放心,和反演无关

根据莫比乌斯函数定义来筛:

根据唯一分解定理

i=p1k1p2k2p3k3...pqkq

对于一个数i, μ(i)={1,(i=1)\0,(k,k>1)\(1)q,(k,k<=1)

​ 1.则对于一个质数i, 显然

μ(i)=1,

​ 2.若i能整除p, 则ip 的原来指数至少为1, ipp指数就一定大于1

μ(ip)=0

​ 3.若i不能整除p, 则i中原来没有p 这个质数, ip 相当于多了一个质数, 则q+=1, 奇变偶, 偶变奇。。。。

μ(ip)=μ(i)

void yych()
{
    mu[1] = 1;
	for(int  i = 2; i <= maxn; i ++)
	{
		if(!vis[i])
		{
			prime[++tot] = i;
			mu[i] = -1;
		}
		for(int j = 1; j <= tot&&prime[j]*i <= maxn; j ++)
		{
			vis[i * prime[j]] = 1;
			if(i%prime[j] == 0)
			{
				mu[i * prime[j]] = 0;
				break;
			}
			else
		       mu[i * prime[j]] = -mu[i];
		}
	}
}
posted @   spbv587  阅读(254)  评论(1编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
点击右上角即可分享
微信分享提示