The Euler functionTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 4389 Accepted Submission(s): 1821 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 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 Recommend gaojie | We have carefully selected several similar problems for you: 2818 2825 2822 2821 2820 |
打表求欧拉函数值
注意数组开成long long 型
第一种:稍微快一点
#include <stdio.h> #include <math.h> #include <vector> #include <queue> #include <string> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> #define maxn 3000000+100 using namespace std; long long E[maxn]; void euler() { E[1]=1; for(int i=2;i<maxn;i++) E[i]=i; for(int i=2;i<maxn;i++){ if(E[i]==i) for(int j=i;j<maxn;j+=i){ E[j]=E[j]/i*(i-1); } } for(int i=2;i<maxn;i++) E[i]+=E[i-1]; } int main() { euler(); int a,b; while(scanf("%d%d",&a,&b)!=EOF) printf("%lld\n",E[b]-E[a-1]); return 0; }
第二种
#include <stdio.h> #include <math.h> #include <vector> #include <queue> #include <string> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> #define maxn 3000000+100 using namespace std; long long E[maxn]; void euler() { for(int i=2;i<maxn;i++){ if(!E[i]) for(int j=i;j<maxn;j+=i){ if(!E[j])E[j]=j; E[j]=E[j]/i*(i-1); } E[i]+=E[i-1]; } } int main() { euler(); int a,b; while(scanf("%d%d",&a,&b)!=EOF) printf("%lld\n",E[b]-E[a-1]); return 0; }
版权声明:本文为博主原创文章,转载请注明出处。