线性筛——欧拉函数

如果不会线性筛素数的话,建议先看这篇博客了解一下线性筛素数。
欧拉函数(积性函数都可以线性筛)主要是在线性筛素数的基础上得到的

欧拉函数: φ ( n ) = n ( 1 1 p i ) φ(n)=n* \prod \left(1-\frac{1}{p_i}\right) φ(n)=n(1pi1) 其中 p i p_i pi n n n的质因子
所以:
1、当 n n n 为质数的时候 φ ( n ) = n 1 φ(n)=n-1 φ(n)=n1
对于 2和3 设 d = n p d=\frac{n}{p} d=pn 其中 p p p n n n 的最小质因子
2、当 p p p d d d 的某个质因子时, 则 φ ( n ) = φ ( d ) p φ(n)=φ(d)*p φ(n)=φ(d)p
3、当 p p p d d d 互质时, φ ( n ) = φ ( d ) φ ( p ) φ(n)=φ(d)*φ(p) φ(n)=φ(d)φ(p)

good luck and have fun!!!
附上代码:

void eular(int n)
{
	memset(vis,0,sizeof(vis));
	phi[1]=1;
	prime[0]=0;
	for(int i=2;i<=n;i++)
	{
		if(!vis[i])
		{
			prime[++prime[0]]=i;
			phi[i]=i-1;
		}
		for(int j=1;j<=prime[0]&&i<=n/prime[j];j++)
		{
			vis[i*prime[j]]=1;
			if(i%prime[j]==0)
			{
				phi[i*prime[j]]=phi[i]*prime[j];
				break;
			}
			phi[i*prime[j]]=phi[i]*(prime[j]-1);
		}
	}
}
全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
能干的三文鱼刷了100道题:公司可能有弄嵌入式需要会画pcb的需求,而且pcb能快速直观看出一个人某方面的实力。看看是否有面试资格。问你问题也能ai出来,pcb这东西能作假概率不高
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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