8.21解题报告

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 的素数要过个七八秒才能出来,所以这个数量级的果断放弃筛法……(但是刚学会个筛法不用上老觉得怪怪的……)

本题重在推导……如下:

8.21解题报告_第1张图片

你可能感兴趣的:(8.21解题报告)