题意:求SB树第N层分母分子小于均等于N的数有多少?
搞清楚了SB Tree的性质,这道题就很容易了。因为SB Tree中的数均为最简分数,所以筛一波欧拉函数即可。
#include<bits/stdc++.h> using namespace std; #define MAXN 1000000+10 int n,phi[MAXN],sum[MAXN]; void form(){ phi[1]=1; for(int i=2;i<=1000000;i++) if(!phi[i]) for(int j=i;j<=1000000;j+=i){ if(!phi[j])phi[j]=j; phi[j]=phi[j]/i*(i-1); } for(int i=1;i<=1000000;i++)sum[i]=sum[i-1]+phi[i]; } int main(){ form(); while(~scanf("%d",&n))printf("%d ",sum[n]*2+1); return 0; }