hdu(欧拉函数应用,用筛法的方法求phi数组)

来源:互联网 发布:音速启动是什么软件 编辑:程序博客网 时间:2024/04/30 15:01

题目输入一个n ,求phi[2]+phi[3]..............+phi[n]

其中phi[n]表示不超过n的并且与n互质的数的个数,即欧拉函数的值

这是一道模板题

代码如下:

#include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#include<time.h>#include<math.h>#define N 1000000 #define eps 1e-9#define pi acos(-1.0)#define P system("pause")#define ll long longusing namespace std;int phi[N+10];void phi_table()  //用类似筛法的方法计算phi[i],这是模板{     memset(phi,0,sizeof(phi));     phi[1] = 1;     for(int i = 2; i <= N; i++)          if(!phi[i])              for(int j = i; j <= N; j += i)              {                      if(!phi[j])                         phi[j] = j;                      phi[j] = phi[j] / i * (i - 1);                         }   }int main(){//freopen("input.txt","r",stdin);//freopen("output.txt","w",stdout);    phi_table();  //  for(int i = 2 ;i < 100; i++)    //  cout<<phi[i]<<" ";       int n;    while(scanf("%d",&n) && n)    {         ll ans = 0 ;         for(int i = 2; i <= n; i++)             ans += (ll)phi[i];        printf("%lld\n",ans);                           }      //  P;                                   return 0;    }


0 0
原创粉丝点击