数论 最简分数 Farey序列求最简分数+POJ3374
法雷数列
定义和定理
定义一: 最简分数(也称既约分数或不可约分数)。若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的最简真分数,且各个分数以递增顺序排 列。
#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 8000000
using namespace std;
int N,t;
int ct=;
int tx[MAXN],ty[MAXN];
void farey (int a,int b,int c,int d)
{
if (b+d > N) return ;
/*if (b+d == N)
{
printf("%d/%d",a+c,b+d);
if(a+c != N-1) printf(",");
return ;
}*/
farey(a,b,a+c,b+d);
//printf("%d/%d,",a+c,b+d);
tx[ct]=a+c;
ty[ct++]=b+d;
farey(a+c,b+d,c,d);
}
int main ()
{
scanf("%d%d",&N,&t);
tx[]=;
ty[]=;
farey(,,,);
tx[ct]=;
ty[ct]=;
for(int i=;i<=t;i++)
{
int m;
scanf("%d",&m);
if(m>ct)
printf("No Solution\n");
else
printf("%d/%d\n",tx[m],ty[m]);
}
return ;
}
数论 最简分数 Farey序列求最简分数+POJ3374的更多相关文章
- SDUT OJ 数据结构实验之链表八:Farey序列
数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Submit Statistic Discuss Problem Descript ...
- SDUT-3331_数据结构实验之链表八:Farey序列
数据结构实验之链表八:Farey序列 Time Limit: 10 ms Memory Limit: 600 KiB Problem Description Farey序列是一个这样的序列:其第一级序 ...
- [YY]已知逆序列求原序列(二分,树状数组)
在看组合数学,看到逆序列这个概念.于是YY了一道题:已知逆序列,求出原序列. 例子: 元素个数 n = 8 逆序列 a={5,3,4,0,2,1,1,0} 则有原序列 p={4,8,6,2,5,1,3 ...
- 两个序列求前k大和
---恢复内容开始--- 没有题目,没有题意,这是学长提过的一个技巧,给你两个排好序的序列,每次可以各从中取一个,求前k大的和, 一个优先队列,先将a序列中最大的那个和b序列所有元素相加存进队列中,每 ...
- bzoj 1095 括号序列求两点距离
大致题意: 给一棵树,每个节点最开始都是黑色,有两种操作,1.询问树中相距最远的一对黑点的距离 2.反转一个节点的颜色 一种做法: 建立出树的括号序列,类似这样: [A[B][C]],所以长度为3*n ...
- hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)
http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java ...
- 【洛谷P1827】【USACO】 美国血统 American Heritage 由二叉树两个序列求第三个序列
P1827 美国血统 American Heritage 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的&q ...
- 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 ...
- Zoj 3529 A Game Between Alice and Bob 数论+博弈Nim 快速求数中有多少个素数因子
本题涉及博弈论中的Nim游戏博弈. Nim游戏博弈详解链接: http://www.cnblogs.com/exponent/articles/2141477.html 本题解题报告详解链接: htt ...
随机推荐
- 如何编译文件(gcc + nasm)
[0]README 编译文件(nasm + gcc),特别是编译目标文件的依赖文件:本文旨在回顾 gcc 和 nams 编译器的编译命令,以及如果有多个依赖文件该如何编译: [1]编译文件 1.1)编 ...
- 新西兰天维网登录发送明文password
新西兰比較有人气的华人社区站点是天维网(新西兰天维网),是这边华人用中文吐槽常常上的论坛,也是华人之间各种交易(比方买卖二手车)的集散地.上次非诚勿扰新西兰专场就是天维网承办的宣传和报名.来新西兰定居 ...
- TCP的四种定时器简单记录
TCP管理的4个不同的定时器: 1.重传定时器:用于当希望收到另一端的确认. 2.坚持定时器:使窗口大小信息保持不断流动. 3.保活定时器:检测TCP空闲连接的另一端何时崩溃或重启. 4.2MSL定时 ...
- SVN设置删除权限
svn是很多企业和个人用的版本控制软件,非常方便.通用的权限控制在auth文件中,但是缺点是权限较大,w的权限一旦赋予,相应用户都可以有删除svn文件的权限,但是如果不赋予w权限,又没办法commit ...
- Delphi String的散漫记录,真是知识无数,陷阱无数
真是膜拜Delphi C++ Builder编译器的作者们,要下多少苦功夫才能解决如此之多的问题,制造出一个神级作品给世人享用.另外以我的编程经验所能想到很麻烦但却是必须的还有两个地方,一个是Form ...
- 使用AXIS2作为Client訪问WebService
使用AXIS2,能够方便的构建WebService的server端,也能够非常方便的作为Cilent,来訪问别的WebService. 以下依据工作中的经历,整理了一下,作为Cilent訪问WebSe ...
- LeetCode:矩形区域【223】
LeetCode:矩形区域[223] 题目描述 在二维平面上计算出两个由直线构成的矩形重叠后形成的总面积. 每个矩形由其左下顶点和右上顶点坐标表示,如图所示. 示例: 输入: -3, 0, 3, 4, ...
- HDU - 1495 非常可乐 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...
- iOS define 宏定义 和 const定义常量区别
const const 是c++中的修饰符. c++中常用来定义常量,修饰左值. #define 宏定义语句, 在预处理阶段直接做文本替换,不做类型检查. 它们之间的最大区别: 1. 对于co ...
- struts2 codebehind + actionPackages 实现Action零配置
1.jar包:struts2-codebehind-plugin-2.2.1.1.jar 2.struts.xml:<!-- codebehind中查找action的返回结果资源时的默认文件夹 ...