HDOJ 4556 Stern-Brocot Tree
来源:互联网 发布:淘宝怎么修改会员名 编辑:程序博客网 时间:2024/04/25 13:47
Stern-Brocot Tree
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total Submission(s): 541 Accepted Submission(s): 287
Problem 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
1246
Sample Output
351325
仔细看图可以发现:对于每一行都可以看成是关于1/1对称的两部分,所以只需求出1/1左边的个数就可求出这一行的个数。而左边全部都是真分数,分母为x的真分数的个数就是x的欧拉函数值。n最大为1000000,所以可以递推打表。
#include <cstdio>using namespace std;const int N = 1000001;int e[N];long long a[N], res = 0;void euler(){ for (int i = 2; i < N; i++) e[i] = 0; e[1] = 1; for (int i = 2; i < N; i++){ if (!e[i]){ for (int j = i; j < N; j += i){ if (!e[j]) e[j] = j; e[j] = e[j] / i * (i - 1); } } }}int main(){ int i, n; euler(); for (i = 1; i < N; i++){ res += e[i]; a[i] = res * 2 + 1; } while (~scanf("%d", &n)) printf("%I64d\n", a[n]); return 0;}
0 0
- HDOJ 4556 Stern-Brocot Tree
- hdoj 4556 Stern-Brocot Tree(欧拉函数)
- HDU-4556-Stern-Brocot Tree
- hdu 4556 Stern-Brocot Tree
- hdu 4556 Stern-Brocot Tree
- HDU 4556 Stern-Brocot Tree
- hdu4556-Stern-Brocot Tree
- hdu4556-Stern-Brocot Tree
- HDOJ 题目4556Stern-Brocot Tree(数学,欧拉函数)
- hdoj Stern-Brocot Tree 4556 (欧拉函数打表)
- hdu 4556 Stern-Brocot
- hdu4556 西山居四 Stern-Brocot Tree
- PE 372 【类欧几里德】【Stern-Brocot Tree】
- Farey序列(Stern-Brocot tree的衍生)
- Hdu 6209 The Intersection(Stern-Brocot tree+二分)
- [Codeforces 585C] Alice, Bob, Oranges and Apples (Stern-Brocot Tree + 更相减损法)
- hdu4556 Stern-Brocot Tree(欧拉函数递推关系)
- Farey序列与Stern-Brocot树
- Android系统提供了哪些东西,供我们可以开发出优秀的应用程序
- git学习笔记-4
- Android WebView总结
- C语言实现单向链表的反转
- pg_stat_database的字段tup_returned,tup_fetched含义
- HDOJ 4556 Stern-Brocot Tree
- LeetCode 13 - Roman to Integer
- java实现目录复制
- ORA-02049: 超时: 分布式事务处理等待锁 问题的解决
- [手游新项目历程]第15天-WebSocket客户端
- C语言常用知识点
- 邮件系统收不到外部邮件域名的配置问题
- Oracle的REGEXP_REPLACE函数简单用法
- 银行家算法(Banker's Algorithm)