题目:
http://poj.org/problem?id=2478题意:
求分母小于等于n的所有不可化简的真分数。思路:
不可化简就是分子分母互质,每个分母包含的这种分数也就是欧拉数,所以求欧拉数打表即可,水题。代码:
#include<stdio.h>
#define N 1123456
long long eul[N],sum[N];
void init()
{
eul[1]=1;
for(long long i=2;i<N;i++)
eul[i]=i;
for(long long i=2;i<N;i++)
if(eul[i]==i)
for(long long j=i;j<N;j+=i)
eul[j]=eul[j]/i*(i-1);
sum[1]=0;
for(long long i=2;i<N;i++)
sum[i]=sum[i-1]+eul[i];
}
int main()
{
int n;
init();
while(scanf("%d",&n)!=EOF&&n)
printf("%lld\n",sum[n]);
return 0;
}