法雷数列

定义和定理

定义一: 最简分数(也称既约分数或不可约分数)。若p,q的最大公约数是1,我们称分数p/q是最简分数。

定义二: 真分数,若p,q是正整数,0<p/q<1, 我们说p/q是真分数

定理:

分数a/b, c/d是最简真分数(也可以是0/1或者1/1)且a/b <c/d, 则有

1)  数(a+c)/(b+d)是一个最简分数

2)  a/b < (a+c)/(b+d) < c/d

证明略

法雷数列的定义:

推导法雷数列方法:

应用定理中的(2),如果 a/b 和 c/d 是一个法雷数列,则在它们中间可以插入 p/q =(a+c)/(b+d),(前提是得出的q值小于或者等于给定的n值)所以可以二分构造,直到不比如

N = 5:

step1: 准备两个数 0/1, 1/1 作为整个法雷数列的第一个元素和最后一个元素0/1, 1/1

step2: 在两个数中间插入1个数1/2, 变为0/1, 1/2, 1/1

step3: 在每对相邻两个数中间插入1个数,变为0/1, 1/3, 1/2, 2/3, 1/1

step4: 在每对相邻两个数中间插入1个数,变为0/1, 1/4, 1/3, 2/5 ,
1/2, 3/5, 2/3, 3/4 ,
1/1

step5: 0/1 和 1/4 之间 和3/4和 1/1 仍然可插入1个数,且插入的数分母不大于5 0/1, 1/5 ,
1/4, 1/3, 2/5, 1/2, 3/5, 2/3, 3/4, 4/5 , 1/1

至此,该序列包含了所有分母不大于5的最简真分数,且各个分数以递增顺序排 列。

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #define MAXN 8000000
  5. using namespace std;
  6. int N,t;
  7. int ct=;
  8. int tx[MAXN],ty[MAXN];
  9. void farey (int a,int b,int c,int d)
  10. {
  11. if (b+d > N) return ;
  12. /*if (b+d == N)
  13. {
  14. printf("%d/%d",a+c,b+d);
  15. if(a+c != N-1) printf(",");
  16. return ;
  17. }*/
  18. farey(a,b,a+c,b+d);
  19. //printf("%d/%d,",a+c,b+d);
  20. tx[ct]=a+c;
  21. ty[ct++]=b+d;
  22. farey(a+c,b+d,c,d);
  23. }
  24. int main ()
  25. {
  26. scanf("%d%d",&N,&t);
  27. tx[]=;
  28. ty[]=;
  29. farey(,,,);
  30. tx[ct]=;
  31. ty[ct]=;
  32. for(int i=;i<=t;i++)
  33. {
  34. int m;
  35. scanf("%d",&m);
  36. if(m>ct)
  37. printf("No Solution\n");
  38. else
  39. printf("%d/%d\n",tx[m],ty[m]);
  40. }
  41. return ;
  42. }

数论 最简分数 Farey序列求最简分数+POJ3374的更多相关文章

  1. SDUT OJ 数据结构实验之链表八:Farey序列

    数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Submit Statistic Discuss Problem Descript ...

  2. SDUT-3331_数据结构实验之链表八:Farey序列

    数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Problem Description Farey序列是一个这样的序列:其第一级序 ...

  3. [YY]已知逆序列求原序列(二分,树状数组)

    在看组合数学,看到逆序列这个概念.于是YY了一道题:已知逆序列,求出原序列. 例子: 元素个数 n = 8 逆序列 a={5,3,4,0,2,1,1,0} 则有原序列 p={4,8,6,2,5,1,3 ...

  4. 两个序列求前k大和

    ---恢复内容开始--- 没有题目,没有题意,这是学长提过的一个技巧,给你两个排好序的序列,每次可以各从中取一个,求前k大的和, 一个优先队列,先将a序列中最大的那个和b序列所有元素相加存进队列中,每 ...

  5. bzoj 1095 括号序列求两点距离

    大致题意: 给一棵树,每个节点最开始都是黑色,有两种操作,1.询问树中相距最远的一对黑点的距离 2.反转一个节点的颜色 一种做法: 建立出树的括号序列,类似这样: [A[B][C]],所以长度为3*n ...

  6. hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)

    http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java ...

  7. 【洛谷P1827】【USACO】 美国血统 American Heritage 由二叉树两个序列求第三个序列

    P1827 美国血统 American Heritage 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的&q ...

  8. HDU2303(数论)大整数求余+素数筛选

    Sample Input 143 10 143 20 667 20 667 30 2573 30 2573 40 0 0   Sample Output GOOD BAD 11 GOOD BAD 23 ...

  9. Zoj 3529 A Game Between Alice and Bob 数论+博弈Nim 快速求数中有多少个素数因子

    本题涉及博弈论中的Nim游戏博弈. Nim游戏博弈详解链接: http://www.cnblogs.com/exponent/articles/2141477.html 本题解题报告详解链接: htt ...

随机推荐

  1. 有一个数组a[N]顺序存放0~N-1,要求每隔两个数删掉一个数,到末尾时循环至开头继续进行,求最后一个被删掉的数的原始下标位置。以8个数(N=7)为例:{0,1,2,3,4,5,6,7},0->1->2(删除)->3->4->5(删除)->6->7->0(删除),如此循环直到最后一个数被删除。

    // ConsoleApplication12.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" // ConsoleApplication1 ...

  2. 09-redis事务及锁应用

    Redis 中的事务 Redis支持简单的事务 Redis与 mysql事务的对比 ------------------------------------------------------- My ...

  3. T-SQL高级查询语句(父子查询)

    T-SQL高级查询语句 高级查询 1.连接查询,对结果集列的扩展 select * from info select * from info,nation #形成笛卡尔积 select * from ...

  4. 之前博客中的代码都放到github上

    之前一直把代码托管在taocode上,现在已经不能用了,所以把代码整理了一下,统一都放在gibhub上了. LALR(1)语法分析生成器:https://github.com/kiven-li/xby ...

  5. android菜鸟学习笔记6----android布局(一)

    Android应用的UI组件都是继承自View类,View类表示的就是一个空白的矩形区域.常用的组件如TextView.Button.EditText等都直接或间接继承自View. 此外,View还有 ...

  6. HTML5(石头剪刀布游戏开发)

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  7. 九度OJ 1150:Counterfeit Dollar(假美元) (分析、检验)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:485 解决:215 题目描述: Sally Jones has a dozen Voyageur silver dollars. Howev ...

  8. exception_action

    for i in range(3, -2, -1): try: print(4 / i) except Exception as e: print(Exception) print(e)

  9. Bootstrap——全局CSS样式

    1.栅格系统 containter:用于固定宽度并支持响应式布局的容器 container-fluid:用于100%宽度,占据全部视口(viewport)的容器 row:行,必须在container或 ...

  10. drawable canvas使用

    /** * Drawable 就是一个可画的对象, * 其可能是一张位图(BitmapDrawable), * 也可能是一个图形(ShapeDrawable), * 还有可能是一个图层(LayerDr ...