输入输出样例
输入 #1复制
2
5
0
输出 #1复制
3
19
【分析】
满足题意的两个数f(x,y)x,y肯定是互质的。 假设我们定住第二个数就是n,那么答案显然是phi(n), 即欧拉函数,小于n并且与n互质的数的个数 那么我们继续假设x<y,那么答案就是sigmaphi(i) i=2~n 最终答案 2*phi[n] + 1
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int Maxn = 50000;
int phi[Maxn + 5];
void Pre(){
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(int argc,char* argv[]) {
Pre(); int n; phi[1] = 0;
while(scanf("%d",&n) == 1 && n) {
printf("%d\n",phi[n] << 1 | 1);
}
return 0;
}