题意
交表 由于f(k∗x,k∗y) 可以由f(x,y)递推出来 让我们求 在x,y都不大于n的情况下
计算最少需要计算多少不同的项
n<=50000
分析
那么也就是说两个数由共因子的不必计算 只计算两个数没有共因子的 那么也就是说 每个数我们只需要找到与他互质的个数就可以了 欧拉函数线性筛
求欧拉函数复杂度O(n*logn*logn)
code
#include<bits/stdc++.h>
using namespace std;
const int maxn = 50010;
int phi[maxn];
void init(){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);}}
}
int main(){int n;init();while(scanf("%d",&n),n){int ans=1;for(int i=n;i>1;i--){//(1,1)就算一次就够了ans+=phi[i]<<1;//符合条件的*2 (x,y)+(y,x)}printf("%d\n",ans);}return 0;
}