poj 2478 欧拉函数

题意:给你一个n,然后求从2-->n的所有数的欧拉函数的和。

欧拉函数模版

View Code
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 
 6 using namespace std;
 7 
 8 #define MAXN 1000010
 9 
10 long long euler[MAXN],sum_euler[MAXN];//sum_euler[i]表示2-->i的欧拉数和
11 int n;
12 void get_euler()
13 {
14     int i,j;
15     euler[1]=1;
16     for(i=2;i<MAXN;i++)
17         euler[i]=i;
18     for(i=2;i<MAXN;i++)
19         if(euler[i]==i)//这里满足的肯定是素数
20         {
21             for(j=i;j<MAXN;j+=i)//更新含有它的数
22                 euler[j]=euler[j]/i*(i-1);//:p(n)=n*(1-1/p1)*(1-1/p2)....*(1-1/pk)
23         }
24 }
25 
26 int main()
27 {
28     get_euler();
29     sum_euler[1]=0;//注意这里是2-->i的欧拉数和,所以为0
30     for(int i=2;i<MAXN;i++)
31         sum_euler[i]=sum_euler[i-1]+euler[i];
32     while(scanf("%d",&n) && n)
33     {
34         printf("%I64d\n",sum_euler[n]);
35     }
36     return 0;
37 }

 

 

posted @ 2012-10-11 00:16  Missa  阅读(187)  评论(0编辑  收藏  举报