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 }