[数学]无限序列

该博客探讨了一个无限序列的变化规律,其中每个1变为10,每个0变为1。通过斐波那契数列的性质,作者分析了如何计算序列中特定区间的1的数量,并提出了解答此类问题的算法思路,即利用斐波那契数列求解区间内1的个数,并处理非斐波那契数的情况。

题目描述
我们按以下方式产生序列:
1、 开始时序列是: “1” ;
2、 每一次变化把序列中的 “1” 变成 “10” ,”0” 变成 “1”。
经过无限次变化,我们得到序列”1011010110110101101…”。
总共有 Q 个询问,每次询问为:在区间A和B之间有多少个1。
任务:写一个程序回答Q个询问
Input
第一行为一个整数Q,后面有Q行,每行两个数用空格隔开的整数a, b。
Output
共Q行,每行一个回答
Sample Input
1
2 8
Sample Output
4

1 <= Q <= 5000
1 <= a <= b < 2^63

分析
我推算了一小会儿两个钟头
发现一个规律,完整的一个序列,它的长度是上一个序列+上上个序列的长度。
是不是似曾相识?没错,就是斐波那契数列
然后我又观察了一会儿,发现当前序列的长度是上一个序列的长度+上一个序列中含1的个数
这就说明了,一个完整的序列中含1的个数必为它的上一项斐波那契数
但是如果序列长不是斐波那契数怎么办?
根据一个不证自明的定理(瞎推的)得知,任何一个正整数都可以被分解成多个斐波那契数
那么我们打个递归函数,把这个正整数的斐波那契部分求出,然后分解剩下不是斐波那契的部分即可
同时打个心眼:区间a,b,a那一位是算进去的,所以不能fib(b)-fib(a),而是fib(b)-fib(a-1)

#include <iostream>
#include <cstdio>
### 离散数学中的序列定义 在离散数学中,**序列**是指一组按照特定顺序排列的对象集合。这些对象通常是数字或其他数学实体,并且可以通过索引来访问每一个元素。形式上,一个序列表示为 \(a_1, a_2, \ldots, a_n\) 或者更一般地写成 \(\{a_i\}_{i=1}^{n}\)[^5]。 #### 序列的分类 - **有限序列**: 只包含有限数量的项。例如,\(S = \{1, 2, 3, 4, 5\}\) 是一个长度为 5 的有限序列。 - **无限序列**: 包含无穷多个项。例如,自然数序列 \(N = \{0, 1, 2, 3, \ldots\}\) 是一个典型的无限序列[^6]。 #### 序列的形式化描述 对于任意给定的正整数 \(n\) 和函数 \(f(i)\),可以构建一个由 \(f(1), f(2), \ldots, f(n)\) 组成的序列。这种构造方法允许通过显式的公式来生成序列中的每一项。例如: \[ S_k = k^2 \] 这表示的是一个平方数序列:\(S = \{1, 4, 9, 16, \ldots\}\)[^7]。 --- ### 示例分析 以下是几个具体的例子及其解释: 1. **斐波那契序列** 斐波那契序列是一种经典的递推关系产生的序列,其定义如下: \[ F_0 = 0,\quad F_1 = 1,\quad F_{n} = F_{n-1} + F_{n-2}, \text{ 对于 } n \geq 2. \] 这个序列的前几项是:\(F = \{0, 1, 1, 2, 3, 5, 8, \ldots\}\)[^8]。 2. **几何序列** 几何序列是由初始值乘以固定比率形成的序列。设首项为 \(a\),公比为 \(r\),则第 \(n\) 项可表示为: \[ G_n = ar^{n-1}. \] 如果取 \(a = 1\) 和 \(r = 2\),那么对应的几何序列为:\(G = \{1, 2, 4, 8, 16, \ldots\}\)[^9]。 3. **调和序列** 调和序列是以倒数为基础构成的一类特殊序列。它的通用形式为: \[ H_n = \frac{1}{n}. \] 前几项依次为:\(H = \{\frac{1}{1}, \frac{1}{2}, \frac{1}{3}, \frac{1}{4}, \ldots\}\)[^10]。 --- ### Python 实现示例 下面提供一段简单的 Python 代码实现上述几种类型的序列生成器: ```python def fibonacci_sequence(length): sequence = [] a, b = 0, 1 while len(sequence) < length: sequence.append(a) a, b = b, a+b return sequence def geometric_sequence(first_term, ratio, length): return [first_term * (ratio ** i) for i in range(length)] def harmonic_sequence(length): return [1 / i for i in range(1, length+1)] ``` 使用以上函数分别生成不同种类的序列并打印结果: ```python print(fibonacci_sequence(10)) print(geometric_sequence(1, 2, 10)) print(harmonic_sequence(10)) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值