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 }

 

 

你可能感兴趣的:(poj)