poj--2478

来源:互联网 发布:网络使人更疏远的数据 编辑:程序博客网 时间:2024/06/14 04:10

题目可以转成求2--n每个数的欧拉函数值之和。

可以利用欧拉函数打表的方法直接求出2--n每个数的欧拉函数值


#include<iostream>#include<cstring>#include<cstdio>using namespace std; int phi[1000000+10];void phi_table()  //打表求出1000000以内每个数的欧拉函数值 {    int i,j,k;    memset(phi,0,sizeof(phi));    for(i=2;i<=1000000;i++)       if(!phi[i])      {         for(j=i;j<=1000000;j+=i)         {            if(!phi[j]) phi[j]=j;            phi[j]=phi[j]/i*(i-1);         }      }} int main(){   long long sum;   int n,i,j;   phi_table();   while(scanf("%d",&n)&&n)   {      sum=0;      for(i=2;i<=n;i++)  //求从2--n的所有数欧拉函数值的和          sum+=phi[i];      printf("%d\n",sum);    } return 0;} 


0 0
原创粉丝点击