hdu2824(2009多校第一场) 线性筛法求欧拉函数

欧拉函数指小于n且与其互质的数个数: phin=n*(1-1/p1)*(1-1/p2)*...(1-1/pn)

由此便可以利用类似筛素数筛出所有欧拉函数,具体看代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 long long phi[3000005];
 4 int main()
 5 {
 6     int i,j,k;
 7     phi[1]=0;
 8    for (i=2;i<=3000000;i++) phi[i]=i;
 9     for (i=2;i<=3000000;i++)
10     {
11         if (phi[i]==i)
12         for (j=1;i*j<=3000000;j++)
13             phi[i*j]=(phi[i*j]/i)*(i-1);
14     }
15     for (k=2;k<=3000000;k++)
16         phi[k]=phi[k-1]+phi[k];
17     while (~scanf("%d%d",&i,&j))
18         printf("%I64d\n",phi[j]-phi[i-1]);
19 }

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2824

posted on 2014-12-08 12:43  xiao_xin  阅读(117)  评论(0编辑  收藏  举报

导航