[NOIP1999 普及组] Cantor 表
题目描述:
现代数学的著名证明之一是 Georg Cantor 证明了有理数是可枚举的。他是用下面这一张表来证明这一命题的:
1/1 , 1/2 , 1/3 , 1/4, 1/5, …
2/1, 2/2 , 2/3, 2/4, …
3/1 , 3/2, 3/3, …
4/1, 4/2, …
5/1, …
…
我们以 Z 字形给上表的每一项编号。第一项是 1/1,然后是 1/2,2/1,3/1,2/2,…
输入格式:
整数N(1 <= N <= 10^7)。
输出格式:
表中的第 N 项。
样例 #1:
样例输入 #1:
7
样例输出 #1
1/4
思路:
算法1:模拟
模拟,按题意一个个枚举
时间复杂度O(n),可以通过本题n≤10^7.
算法2:枚举
发现Z字形的每条斜线可以快速枚举,即枚举
1/1 , 1/2 , 3/1 , 1/4 , 5/1 , 1/6……找到要求的第n项所在斜线,再一个个枚举或计算得出答案
时间复杂度O(√n),可以通过n≤10^14
算法2.2:枚举简化
枚举第n项在哪一行,计算得出答案,比算法2好写,
时间复杂度同算法2
算法3:二分
发现第i条斜线(即分子分母之和&