HDU2824 The Euler function(欧拉函数)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU2824 The Euler function(欧拉函数)相关的知识,希望对你有一定的参考价值。

题目求φ(a)+φ(a+1)+...+φ(b-1)+φ(b)。

用欧拉筛选法O(n)计算出n以内的φ值,存个前缀和即可。

  • φ(p)=p-1(p是质数),小于这个质数且与其互质的个数就是p-1;
  • φ(p*a)=(p-1)*φ(a)(p是质数且p|a),因为欧拉函数是积性函数,φ(p*a)=φ(p)*φ(a);
  • φ(p*a)=p*φ(a)(p是质数且p不能整除a),不知怎么理解。。
 1 #include<cstdio>
 2 #include<cstring>
 3 using namespace std;
 4 #define MAXN 3000000
 5 long long phi[MAXN];
 6 int prime[MAXN];
 7 bool vis[MAXN];
 8 void euler(){
 9     phi[1]=1;
10     int tot=0;
11     for(long long i=2; i<MAXN; ++i){
12         if(!vis[i]){
13             prime[tot++]=i;
14             phi[i]=i-1;
15         }
16         for(int j=0; j<tot; ++j){
17             if(i*prime[j]>MAXN) break;
18             vis[i*prime[j]]=1;
19             if(i%prime[j]==0){
20                 phi[i*prime[j]]=phi[i]*prime[j];
21                 break;
22             }else{
23                 phi[i*prime[j]]=phi[i]*(prime[j]-1);
24             }
25         }
26     }
27 }
28 int main(){
29     euler();
30     for(int i=2; i<MAXN; ++i) phi[i]+=phi[i-1];
31     int a,b;
32     while(~scanf("%d%d",&a,&b)){
33         printf("%lld\n",phi[b]-phi[a-1]);
34     }
35     return 0;
36 } 

 

以上是关于HDU2824 The Euler function(欧拉函数)的主要内容,如果未能解决你的问题,请参考以下文章

HDU 2824 The Euler function

HDU——2824 The Euler function

HDU——T 2824 The Euler function

hdu-2824 The Euler function(欧拉函数)

hdu2824 The Euler function O(n)求欧拉函数

HDU2824 The Euler function(欧拉函数)