首页 > 考试 > 其他 > 正文
HDU 4556 Stern-Brocot Tree
2016-10-02       个评论    来源:nameofcsdn的博客  
收藏    我要投稿

Description

  
\

  
  上图是一棵Stern-Brocot树,其生成规则如下:
  从第1行到第n行,每行相邻两数a/b和c/d,产生中间数(a+c)/(b+d),置于下一行中。将一行的分数(包括0/1,1/0),进行约分简化,则每一行(包括0/1,1/0,1/1),不会出现两个相同的分数。若分子或者分母大于n,则去掉该分数,将剩下的分数,从小到大排序,得到数列F。
  现在请您编程计算第n行的数列F的个数。

Input

  输入包含多组测试用例,每组输入数据是一个正整数n(n<=1000000)。

Output

  对于每组的测试数据n,请输出第n行的数列F的个数。

Sample Input

1
2
4
6

Sample Output

3
5
13
25

 

这个题目就是想说明,SB树和Farey序列的关系。

代码:

 

#include
#include
using namespace std;

long long phi[1000001];	

void get_phi()
{
	for (int i = 1; i <= 1000000; i++)phi[i] = i;
	for (int i = 2; i <= 1000000; i++)
	{
	if (phi[i] == i)for (int j = i; j <= 1000000; j += i)phi[j] = phi[j] / i*(i - 1);
	phi[i] += phi[i - 1];	
	}
}

int main()
{
	get_phi();
	int n;
	while (scanf("%d",&n)!=-1)printf("%llu\n", phi[n]*2+ 1);
	return 0;
}

 

点击复制链接 与好友分享!回本站首页
上一篇:【LightOJ 1038】Race to 1 Again(概率DP求期望)
下一篇:HDU 2602 Bone Collector【01背包入门题】
相关文章
图文推荐
文章
推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做实用的IT技术学习网站