题目链接
题意
输入n,有多少个二元组满足1<=x,y<=n,且x,y互素。
题解
设满足x < y的有f(n)个,一共就2*f(n)+1
当x==y的只有(1,1)
f(n) = phi(2)+phi(3)+…+phi(n)
代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn = 5e4+10;
int phi[maxn];
void Euler()
{
memset(phi,0,sizeof(phi));
phi[1] = 1;
for(int i=2;i<maxn;i++) if(!phi[i])
{
for(int j=i;j<maxn;j+=i) {
if(!phi[j]) phi[j] = j;
phi[j] = phi[j] / i *(i-1);
}
}
for(int i=3;i<maxn;i++) phi[i] += phi[i-1];
}
int main()
{
Euler();
int n;
while(~scanf("%d",&n),n)
{
if(n!=1) printf("%d\n",2*phi[n]+1);
else printf("%d\n",n);
}
return 0;
}