HDU 2824 The Euler function

来源:互联网 发布:web软件测试工具 编辑:程序博客网 时间:2024/06/05 05:11

Problem Description
The Euler function phi is an important kind of function in number theory, (n) represents the amount of the numbers which are smaller than n and coprime to n, and this function has a lot of beautiful characteristics. Here comes a very easy question: suppose you are given a, b, try to calculate (a)+ (a+1)+....+ (b)
 

Input
There are several test cases. Each line has two integers a, b (2<a<b<3000000).
 

Output
Output the result of (a)+ (a+1)+....+ (b)
 

Sample Input
3 100
 

Sample Output
3042
 

Source
2009 Multi-University Training Contest 1 - Host by TJU
 

Recommend
gaojie   |   We have carefully selected several similar problems for you:  2818 2825 2817 2822 2821 

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

线性筛求欧拉函数~


用到的性质是:

(1)当p是质数时,φ(p)=p-1;

(2)如果i%p==0,那么φ(i*p)=p*φ(i).


然后,输入是多组数据……


#include<cstdio>int x,y,a[3000001],phi[3000001];long long tot;bool b[3000001];void findd(int u){phi[1]=1;for(int i=2;i<=u;i++){if(!b[i]){a[++a[0]]=i;phi[i]=i-1;}for(int j=1;j<=a[0];j++){if(a[j]*i>u) break;b[a[j]*i]=1;if(i%a[j]==0){phi[a[j]*i]=phi[i]*a[j];break;}phi[a[j]*i]=phi[i]*(a[j]-1);}}}int main(){findd(3000000);while(scanf("%d%d",&x,&y)==2){tot=0;for(int i=x;i<=y;i++) tot+=(long long)phi[i];printf("%lld\n",tot);}return 0;}


1 0