写在前面

最近在看一本很开阔思路的书, 名为《组合证明的艺术(proof that really count: The art of combinatorial proof)》,中译版是机械工业出版社出版的, 里面有一些错漏的地方(如符号等), 建议大家中英文对照着看(如果有兴趣的话).

虽然是写给高中生的书, 但是对我来说还是很受启发, 不得不说组合证明实在是巧妙, 称为一门艺术也不足为奇. 下面主要对这样一个定理作组合意义上的证明 (直接利用通项公式也可证明,但是步骤要繁琐很多).

预备定义

  1. 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,…

  2. 为方便后述定理, 这里用新记号fnf_nfn​表示Fibonacci数, 有fn=Fn+1,∀n⩾−1f_n=F_{n+1},\, \forall n\geqslant -1fn​=Fn+1​,∀n⩾−1.

  3. 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​).

  4. 可分隔(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=1q​fm−1j−1​fn−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单位块处是可分隔的. 考虑下面三种不同位置上的平铺(如下图):

  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​种方法;
  2. 对于(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);
  3. 对于剩下的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−1​j=1∑q​fm−1j−1​fn−jm​.

Fibonacci数列整除性质的组合证明相关推荐

  1. fibonacci数列的性质(ZOJ3707)

    题目:Calculate Prime S   题意: Define S[n] as the number of subsets of {1, 2, ...,n} that contain no con ...

  2. tsinsen A1067. Fibonacci数列整除问题 dp

    A1067. Fibonacci数列整除问题 时间限制:1.0s   内存限制:512.0MB   总提交次数:2796   AC次数:496   平均分:51.83 将本题分享到: 查看未格式化的试 ...

  3. Fibonacci 数列和 Lucas 数列的性质、推论及其证明

    Fibonacci 数列 设 f ( x ) = 1 , x ∈ { 1 , 2 } = f ( x − 1 ) + f ( x − 2 ) , x ∈ [ 3 , ∞ ) \begin{aligne ...

  4. 以每行5个数输出fib前20 c语言循环,打印Fibonacci数列方法汇总(前20项,每行5个)...

    NO.1 迭代法 标签:通俗.易懂 思路:先打印第一项.再在循环里面执行fib=fib1+fib2,把fib2赋给fib1,把fib赋给fib2,每行5个可使用if函数(循环次数对5取余). #inc ...

  5. hdu 4639 2013多校第四场 hehe Fibonacci 数列,组合计数,字符串处理

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=4639 题目思路: 首先我们取出所有he这样的东西,考察连续的k个"he"串,通过找 ...

  6. 程序员面试题精选100题(16)-O(logn)求Fibonacci数列[算法]

    题目:定义Fibonacci数列如下: /  0                      n=0 f(n)=      1                      n=1         \  f ...

  7. fibonacci数列前20项_面试题精选:神奇的斐波那契数列

    斐波那契数列,其最开始的几项是0.1.1.2.3.5.8.13.21.34-- ,后面的每一项是前两项之和,事实上,斐波那契在数学上有自己的严格递归定义. f0 = 0 f1 = 1 f(n) = f ...

  8. 从蓝桥杯来谈Fibonacci数列

    2014年蓝桥杯的第九题是这样描述的:     给定Fibonacci数列F[],其中,,求表达式                  的值.其中 在讲解这道题之前,我们先来看一个简单版的.题目如下: ...

  9. Fibonacci数列第n项的第7种计算方法:Python列表

    前面已经分享了几种计算Fibonacci数列第n项的方法,详见Python快速计算Fibonacci数列中第n项的方法和三种Fibonacci数列第n项计算方法及其优劣分析,本文分享第7种(过几天分享 ...

最新文章

  1. python SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: trunca
  2. UVa10639 Square Puzzle(WA)
  3. Planetary Science and Life in the Universe
  4. jdbc获取mysql表数据类型_jdbc操作数据库并自动获取字段类型
  5. C++ 学习之旅(10)——static与extern
  6. 通信PK电子,谁牛?
  7. Xshell6突然连不上K8S所在的虚拟机
  8. 豆腐怎么做小朋友才喜欢吃?
  9. Event.ADDED_TO_STAGE的本质
  10. smarty模板基础
  11. (自学笔记) 谭浩强 C语言程序设计 第五版 第一章:程序设计和c语言
  12. iOS更新系统服务器出错,iPhone 更新失败怎么办?更新 iOS 常见的错误代码及解决方法...
  13. el表达式中三元表达式
  14. 实时可视化大数据项目05 -- UI界面
  15. matlab2c使用c++实现matlab函数系列教程-imag函数
  16. React父传子、子传父
  17. MTBD 电影市场分析
  18. HTTPS 的实现原理
  19. 创建我的GitHub账号及使用
  20. Linux硬盘镜像获取与还原(dd、AccessData FTK Imager)

热门文章

  1. .Net消息队列学习(一)
  2. Qt Quick QMl学习笔记 之图片浏览器
  3. python第九十一天----第十六周作业
  4. shell脚本实现自动化备份
  5. sass调试--页面看到sass文件而不是css文件问题
  6. Objective-C:ARC自动释放对象内存
  7. CentOS 下的邮件通知
  8. 数码摄影入门之二 准确的曝光
  9. xcode配置最新版opencv
  10. 如何用java写单链表_如何使用Java实现单链表?