题意
交表 由于
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;
}