一个简单的数学小魔术

在一张纸上并排画 11 个小方格。叫你的好朋友背对着你(确保你看不到他在纸上写什么),在前两个方格中随便填两个 1 到 10 之间的数。从第三个方格开始,在每个方格里填入前两个方格里的数之和。让你的朋友一直算出第 10 个方格里的数。假如你的朋友一开始填入方格的数是 7 和 3 ,那么前 10 个方格里的数应该是

7 3 10 13 23 36 59 95 154 249

现在,叫你的朋友报出第 10 个方格里的数,你只需要在计算器上按几个键,便能说出第 11 个方格里的数应该是多少。你的朋友会非常惊奇地发现,把第 11 个方格里的数计算出来,所得的结果与你的预测一模一样!这就奇怪了,在不知道头两个数是多少的情况下,只知道第 10 个数的大小,不知道第 9 个数的大小,怎么能猜对第 11 个数的值呢?

魔术揭秘:只需要除以 0.618

其实,仅凭借第 10 个数来推测第 11 个数的方法非常简单,你需要做的仅仅是把第 10 个数除以 0.618,得到的结果四舍五入一下就是第 11 个数了。在上面的例子中,由于 249÷0.618 = 402.913.. ≈ 403,因此你可以胸有成竹地断定,第 11 个数就是 403。而事实上,154 与 249 相加真的就等于 403。把头两个方格里的数换一换,结论依然成立:

2 9 11 20 31 52 82 133 215 348

可以看到,第 11 个数应该为 215+348 = 563,而 348 除以 0.618 就等于 563.107..,与实际结果惊人地吻合。这究竟是怎么回事儿呢?

魔术原理:溶液调配的启示

不妨假设你的好朋友最初在纸上写下的两个数分别是 a 和 b 。那么,这 11 个方格里的数分别为:

a   b   a+b   a+2b   2a+3b   3a+5b   5a+8b   8a+13b   13a+21b   21a+34b   34a+55b

接下来,我们只需要说明,21a+34b 除以 34a+55b 的结果非常接近 0.618 即可。

让我们来考虑另一个看似与此无关的生活小常识:两杯浓度不同的盐水混合在一起,调配出来的盐水浓度一定介于原来两杯盐水的浓度之间。换句话说,如果其中一杯盐水的浓度是 a/b,另一杯盐水的浓度是 c/d,那么 (a+c)/(b+d) 一定介于 a/b 和 c/d 之间。

因此,(21a+34b)/(34a+55b) 就一定介于 21a/34a 和 34b/55b 之间。而 21a/34a = 21/34 ≈ 0.6176,34b/55b = 34/55 ≈ 0.6182,可见不管 a 和 b 是多少,(21a+34b)/(34a+55b) 都被夹在了 0.6176 和 0.6182 之间。如果 a 和 b 都不大,用 21a+34b 的值除以 0.618 来推测 34a+55b 是相当靠谱的。

有的读者可能已经发现了,0.618 不是别的数,正是神秘的黄金分割;而上表中出现的系数 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, … 正是传说中的斐波那契数列。算术中最富神秘色彩的两个概念在此交织,看来这个简单小魔术的来头并不简单啊。

一个简单的数学小魔术

时间: 2024-10-22 20:21:07

一个简单的数学小魔术的相关文章

python实现简单的数学小程序

冒泡法排列list利用打标记来优化 避免重复循环杨辉三角形process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=" alt="python实现简单的数学小程序" />建立二维列表,if判定打印出第一个与最后一个1,其余利用列表索引计算与上图类似将每一行列表尾部补0,利用负索引 直接

Spring Aop 实现一个简单的memcached小插件

memcached我就不多做介绍了,也就是一个分布式缓存系统!是一个典型的NOSQL. 下面我将用spring aop来实现一个简单的插件,来实现annotation方式,简单方便的取得缓存 一.首先我们得定义一个annotation. <strong>package org.xiezhaodong.spring.annotation; import java.lang.annotation.Documented; import java.lang.annotation.ElementType

python网络编程基础--socket的简介,以及使用socket来搭建一个简单的udp小程序

socket介绍: socket(简称套接字),是进程间通讯的一个工具,他能实现把数据从一方传输到另一方,完成不同电脑上进程之间的通讯,它好比数据的搬运工.socket应用:不夸张来说,只要跟网络相关的应用程序或者软件都使用到了socket, 比如:微信,qq等使用socket创建udp网络程序的流程:1,创建客户端套接字2,发送/接收数据3,关闭套接字使用程序展现流程 :(使用的 ide为pycharm):1,首先创建socket,在 Python 中 使用socket 模块的函数 socke

一个简单的Android小实例

一.配置环境 1.下载intellij idea15 2.安装Android SDK,通过Android SDK管理器安装或卸载Android平台 3.安装JDK 二.intellij idea新建Android工程 1.File->New-Project... 2.选择Android->Application Module,下一步 说明:建议选择这个项,建立的是一个可以运行的几乎是空的工程,是用ant进行构建的目录结构: gradle:Android module,建立的工程是以gradle

一个简单的定时小程序

之前一直觉得定时程序好神秘,后来,当我自己真正写了一个小的定时程序时,发现其实没有想象中的那么难.下面,我分享一下我自己的操作过程,希望能对大家有帮助. 1)在我们的项目中添加引用文件:TaskSchedulerEngine.dll(dll定义了一个ITask接口,定义了两个方法Initialize和HandleConditionsMetEvent): 2)创建一个定时触发的类:SyncTask.cs(类名自己随便定义),该类必须实现接口 ITask.具体代码如下: public class S

一个简单的shell小脚本,批量ping主机ip的存活状态

#!bin/bash #ping host ip #2018年7月17日 #The shell script author xiaolong for hostip in {200..210}; #此处还可以换成 `seq 200 210`: do ip="192.168.1.$hostip" ping -c 1 -W 2 $ip &> /dev/null #/dev/null相当与是一个垃圾站,将错误信息放到里面: if [ "$?" == "

js手写一个实现一个简单的promise__小前端chenMr

1.首先来看一下promise常用场景 function chenPromise (arg) { return new Promise (resolve, reject) { if () { doSomeThing(arg) resolve(val) } else { reject(val) } } }chenPromise(arg).then(((val) => {}, (err) =>{}) 2.了解promise状态 1.常规分三种:PENDING, RESOLVED, REJECTED

一个简单的vue小例子之倒计时

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <script src="http://g.tbcdn.cn/mtb/lib-flexible/0.3.4/??flexible_css.js,flexible.js"></script> <title>测试</title> <

一个简单的“贪吃蛇”小游戏

一个简单的“贪吃蛇”小游戏 页面结构 简单的21x21的方块,页面结构 id为container的div包含所21个class名为row的div,每个row代表贪吃蛇的一整行,每个row中又包含21个div,代表这一行的每一个div方格,如果这个方格是空的话,div的类名为blank,如果这一个方格表示“贪吃蛇”的“食物”,div的类名为food,如果这一个方格表示“蛇”,div的类名为snake. CSS JS 然后我们思考下一个贪吃蛇游戏需要那些参数, 首先,界面中可见的元素无非就是空方格,