HDU 4556 Stern-Brocot Tree

题意:求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\n",sum[n]*2+1);
    return 0;
}

 

posted @ 2017-10-20 11:40  NINGLONG  阅读(168)  评论(0编辑  收藏  举报