#include<iostream>
#include<stdio.h>
using namespace std;
int a[1000005];
long long sum[1000005];
void phi_table(int n , int * phi)//筛选法求欧拉函数
{
for(int i=2 ; i<= n; i++) phi[i] = 0;
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()
{
int n;
phi_table(1000001,a);
sum[2]=0;
for(int i=2;i<=1000001;i++)
sum[i] = sum[i-1]+ a[i];
while(scanf("%d",&n),n)
printf("%I64d/n",sum[n]);
}
2478 Farey Sequence 求欧拉函数,利用素数筛选法
欧拉函数计算与应用
本文介绍了一种使用筛选法高效计算欧拉函数的方法,并通过一个C++程序实现了该算法。该程序首先预处理出一定范围内的所有欧拉函数值,并使用前缀和技巧来快速查询任意数n的欧拉函数累加值。

被折叠的 条评论
为什么被折叠?



