Hdu2824 : http://acm.hdu.edu.cn/showproblem.php?pid=2824
欧拉函数的筛法,太精彩了……跟素数筛法差不多,利用了定义。
void Euler()
{
int i,k;
for (i=0;i<3500000;i++)
{
phi[i]=0;
}
phi[1]=1;
for (i=2;i<3500000;i++)
{
if (phi[i]!=0) continue;
k=1;
while(k*i<3500000)//把所有因子为 i 的数都乘以 (i-1)/i......
{
if (phi[k*i]==0)
{
phi[k*i]=k*i;
}
phi[k*i]=phi[k*i]/i*(i-1);
k++;
}
}
}
对于欧拉函数,还有如下性质:
在程序中利用欧拉函数如下性质,可以快速求出欧拉函数的值(a 为 N 的质因素 )
若(N%a==0 && (N/a)%a==0) 则有 :E(N)=E(N/a)*a;
若(N%a==0 && (N/a)%a!=0) 则有 :E(N)=E(N/a)*(a-1);
Hdu3501 : http://acm.hdu.edu.cn/showproblem.php?pid=3501
我一直感觉暴搜会超时……然后想想,如果用筛法就更超时了……所以还是搜吧……
因为昨天有一题筛10^9 的素数要过个七八秒才能出来,所以这个数量级的果断放弃筛法……(但是刚学会个筛法不用上老觉得怪怪的……)
本题重在推导……如下:
本文详细介绍了如何使用筛法高效地计算欧拉函数,并通过具体实例解释了其背后的数学原理。此外,还探讨了欧拉函数的一些重要性质及其在算法竞赛中的应用。

929

被折叠的 条评论
为什么被折叠?



