Fibonacci数列整除性质的组合证明
写在前面
最近在看一本很开阔思路的书, 名为《组合证明的艺术(proof that really count: The art of combinatorial proof)》,中译版是机械工业出版社出版的, 里面有一些错漏的地方(如符号等), 建议大家中英文对照着看(如果有兴趣的话).
虽然是写给高中生的书, 但是对我来说还是很受启发, 不得不说组合证明实在是巧妙, 称为一门艺术也不足为奇. 下面主要对这样一个定理作组合意义上的证明 (直接利用通项公式也可证明,但是步骤要繁琐很多).
预备定义
Fibonacci数:Fn=Fn−1+Fn−2,(n⩾2),F0=0,F1=1F_n=F_{n-1}+F_{n-2}, (n\geqslant2),F_0=0,\,F_1=1Fn=Fn−1+Fn−2,(n⩾2),F0=0,F1=1, e.g.e.g.e.g.
0,1,1,2,3,5,8,13,…0,1,1,2,3,5,8,13,\dots 0,1,1,2,3,5,8,13,…为方便后述定理, 这里用新记号fnf_nfn表示Fibonacci数, 有fn=Fn+1,∀n⩾−1f_n=F_{n+1},\, \forall n\geqslant -1fn=Fn+1,∀n⩾−1.
nnn-平铺: 对于一块长为nnn的地板, 使用长为1或2的砖块铺满整块地板, 所有满足条件的方法数为fnf_nfn(直接由尾部砖块为1或2即可得到递推关系fn=fn−1+fn−2f_n=f_{n-1}+f_{n-2}fn=fn−1+fn−2).
可分隔(breakable): 一个nnn-平铺在kkk单位块可分隔, 即该平铺在第kkk个单位块处为方砖块(长度为1), 若该处是长度为2的砖块, 则不可分隔.
定理
对m⩾1,n⩾0m\geqslant1,n\geqslant0m⩾1,n⩾0, 如果m∣nm\,|\,nm∣n, 那么fm−1∣fn−1f_{m-1}\,|\,f_{n-1}fm−1∣fn−1, 事实上, 若n=qmn=qmn=qm, 则fn−1=fm−1∑j=1qfm−1j−1fn−jmf_{n-1}=f_{m-1}\sum_{j=1}^qf_{m-1}^{j-1}f_{n-jm}fn−1=fm−1∑j=1qfm−1j−1fn−jm.
组合证明
考虑这样一个问题
当n=qmn=qmn=qm时, 存在多少种n−1n-1n−1平铺?
第一种解答: 显然是fn−1f_{n-1}fn−1;
第二种解答:
考虑一个最小的jjj, 使得平铺在第jm−1jm-1jm−1单位块处可分隔, 这样的jjj显然存在且至多为qqq, 因为平铺在n−1=qm−1n-1=qm-1n−1=qm−1单位块处是可分隔的. 考虑下面三种不同位置上的平铺(如下图):
- 给定一个jjj, 则有j−1j-1j−1块长度为2的砖块位于m,2m,…,(j−1)mm,2m,\dots,(j-1)mm,2m,…,(j−1)m单位块处(因为jm−1jm-1jm−1为最小的可分隔位置), 这些长度为2的砖块的平铺有fm−2j−1f_{m-2}^{j-1}fm−2j−1种方法;
- 对于(j−1)m+1(j-1)m+1(j−1)m+1直到jm−1jm-1jm−1单位块, 有fm−1f_{m-1}fm−1种平铺方法(因为其长度为jm−1−(j−1)m−1+1=m−1jm-1-(j-1)m-1+1=m-1jm−1−(j−1)m−1+1=m−1);
- 对于剩下的n−jmn-jmn−jm个单位块, 有fn−jmf_{n-jm}fn−jm种平铺方法.
综上, 我们得到了:
fn−1=fm−1∑j=1qfm−1j−1fn−jm.f_{n-1}=f_{m-1}\sum_{j=1}^qf_{m-1}^{j-1}f_{n-jm}. fn−1=fm−1j=1∑qfm−1j−1fn−jm.
Fibonacci数列整除性质的组合证明相关推荐
- fibonacci数列的性质(ZOJ3707)
题目:Calculate Prime S 题意: Define S[n] as the number of subsets of {1, 2, ...,n} that contain no con ...
- tsinsen A1067. Fibonacci数列整除问题 dp
A1067. Fibonacci数列整除问题 时间限制:1.0s 内存限制:512.0MB 总提交次数:2796 AC次数:496 平均分:51.83 将本题分享到: 查看未格式化的试 ...
- Fibonacci 数列和 Lucas 数列的性质、推论及其证明
Fibonacci 数列 设 f ( x ) = 1 , x ∈ { 1 , 2 } = f ( x − 1 ) + f ( x − 2 ) , x ∈ [ 3 , ∞ ) \begin{aligne ...
- 以每行5个数输出fib前20 c语言循环,打印Fibonacci数列方法汇总(前20项,每行5个)...
NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...
- hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4639 题目思路: 首先我们取出所有he这样的东西,考察连续的k个"he"串,通过找 ...
- 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]
题目:定义Fibonacci数列如下: / 0 n=0 f(n)= 1 n=1 \ f ...
- fibonacci数列前20项_面试题精选:神奇的斐波那契数列
斐波那契数列,其最开始的几项是0.1.1.2.3.5.8.13.21.34-- ,后面的每一项是前两项之和,事实上,斐波那契在数学上有自己的严格递归定义. f0 = 0 f1 = 1 f(n) = f ...
- 从蓝桥杯来谈Fibonacci数列
2014年蓝桥杯的第九题是这样描述的: 给定Fibonacci数列F[],其中,,求表达式 的值.其中 在讲解这道题之前,我们先来看一个简单版的.题目如下: ...
- Fibonacci数列第n项的第7种计算方法:Python列表
前面已经分享了几种计算Fibonacci数列第n项的方法,详见Python快速计算Fibonacci数列中第n项的方法和三种Fibonacci数列第n项计算方法及其优劣分析,本文分享第7种(过几天分享 ...
最新文章
- python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunca
- UVa10639 Square Puzzle(WA)
- Planetary Science and Life in the Universe
- jdbc获取mysql表数据类型_jdbc操作数据库并自动获取字段类型
- C++ 学习之旅(10)——static与extern
- 通信PK电子,谁牛?
- Xshell6突然连不上K8S所在的虚拟机
- 豆腐怎么做小朋友才喜欢吃?
- Event.ADDED_TO_STAGE的本质
- smarty模板基础
- (自学笔记) 谭浩强 C语言程序设计 第五版 第一章:程序设计和c语言
- iOS更新系统服务器出错,iPhone 更新失败怎么办?更新 iOS 常见的错误代码及解决方法...
- el表达式中三元表达式
- 实时可视化大数据项目05 -- UI界面
- matlab2c使用c++实现matlab函数系列教程-imag函数
- React父传子、子传父
- MTBD 电影市场分析
- HTTPS 的实现原理
- 创建我的GitHub账号及使用
- Linux硬盘镜像获取与还原(dd、AccessData FTK Imager)