AC通道:http://vjudge.net/problem/POJ-2478
【题目大意】
求在[1,n]范围内的(a,b)且a≠b,满足gcd(a,b)=1的个数
【题解】
欧拉函数裸题,无需多言。
/*************
POJ 2478
by chty
2016.11.3
*************/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<ctime>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 1000010
int n,phi[MAXN],check[MAXN],prime[MAXN];
inline int read()
{
int x=0,f=1; char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-1; ch=getchar();}
while(isdigit(ch)) {x=x*10+ch-'0'; ch=getchar();}
return x*f;
}
void get()
{
phi[1]=1; int cnt=0;
for(int i=2;i<=MAXN;i++)
{
if(!check[i]) {prime[++cnt]=i; phi[i]=i-1;}
for(int j=1;j<=cnt&&prime[j]*i<=MAXN;j++)
{
check[i*prime[j]]=1;
if(i%prime[j]) phi[i*prime[j]]=phi[i]*(prime[j]-1);
else {phi[i*prime[j]]=phi[i]*prime[j]; break;}
}
}
}
int main()
{
freopen("cin.in","r",stdin);
freopen("cout.out","w",stdout);
get();
while(scanf("%d",&n)&&n)
{
long long ans=0;
for(int i=2;i<=n;i++) ans+=phi[i];
printf("%lld\n",ans);
}
return 0;
}