如何从第一性原则的原理分解数学问题
如何从第一性原则的原理分解数学问题
摘要:牛津大学入学考试题目展示了所有优秀数学家都使用的系统的第一原则推理,而GPT4仍然在这方面有困难
作者:Keith McNulty
我们中的许多人都熟悉直角三角形的边的规则。根据毕达哥拉斯定理,如果a和b是两条较短的边,c是最长的边,那么a² + b² = c²。

已知的整数解称为毕达哥拉斯三元组。例如,(3, 4, 5) 和 (5, 12, 13) 就是其中的一些。
更一般的构造是三元组。任何一组可以构成三角形的正整数三元组都称为三元组。
显然,整数毕达哥拉斯三元组也是三元组。但通常情况下,如果一个整数三元组 (a, b, c) 在(非严格)递增的顺序列出时,前两个整数的和严格大于第三个整数,那么它就是一个三元组。
以 (4, 2, 3) 为例。这些可以是三角形的边长,因为2 + 3 > 4。类似地,(2, 2, 2) 是一个三元组。但 (1, 3, 1) 不是三元组,因为无法用这些边长构建三角形(1 + 1 ≯ 3)。
最近牛津大学入学考试的一个问题涉及到三元组,我认为它很好地说明了如何逐步从第一原则分解问题,以解决起初看起来非常具有挑战性的问题。
这个问题定义了一个函数 f(P),其中 P > 2,表示三元组的数量,它们的和为 P。最后,它要求我们找到 f(21)。
找到和为 21 的三元组的数量似乎是一个真正的智力挑战,但是使用一些逐步的系统步骤,我们可以找到一个非常简单的计算方法。
最后,我还将展示像GPT4这样的人工智能在需要第一原则推理的这类问题上存在真正的问题。
以下是问题的各个部分和我的解决方案。我发现这是一个有趣的问题,是数学思维的很好练习,几乎不需要课本知识。
(i) 找到 f(3), f(4), f(5), f(6) 的值 这只是让我们适应思考和理解一个新概念。
由于唯一的正整数三元组,其和为三,是 (1, 1, 1),而且这显然是一个三元组,所以 f(3) = 1
任何和为 4 的正整数三元组都必须包含2。因此,另外两个数字都是1。由于1 + 1 不严格大于 2,所以不存在三元组,因此 f(4) = 0。
任何和为 5 的正整数三元组都必须包含2或3,但不能同时包含。如果它包含3,那么其他两个必须都是1,而这不是三元组。如果它包含2,那么其他两个必须是1和2,这是一个三元组。
因此,(2, 2, 1),(2, 1, 2) 和 (1, 2, 2) 都是这样的三元组,所以 f(5) = 3。
任何和为 6 的正整数三元组必须包含一个4和两个1(不是三元组),一个3、2和1各一个(不是三元组),或者三个2(是三元组)。
因此,唯一的三元组是 (2, 2, 2),因此 f(6) = 1。
(ii) 如果 (a, b, c) 是一个三元组,证明 (a+1, b+1, c+1) 也是一个三元组
首先注意,我们总是可以假设 a, b, c 是(非严格)递增的顺序,因为如果它们不是,我们可以简单地重新排列它们,使它们变成递增的。
这种推理在这个问题的大多数部分都很重要。
现在,由于 a+b > c,我们可以说 (a+1) + (b+1) = (a+b)+2 > c+2 > c+1。因此,(a+1, b+1, c+1) 是一个三元组。
(iii) 如果 (x, y, z) 是一个三元组,x+y+z 是偶数且不小于 6,证明 x, y 和 z 都至少为 2,并且 (x-1, y-1, z-1) 也是一个三元组
再次假设 x, y, z 是递增的。为了证明它们都至少为 2,我们只需要证明 x 不能为 1。假设 x = 1。然后 1+y+z 是偶数,所以 y+z 是奇数。
此外,我们有 1+y > z,所以 y > z -1,因此 y ≥ z。但我们知道 y ≤ z,因此 y = z。所以 y+z 是偶数。
这是一个矛盾,所以 x > 1。
(iv) 证明对于任何大于等于 3 的正整数 k,f(2k-3) = f(2k) 根据第二部分,我们知
道任何和为 2k-3 的三元组都可以通过简单地对每个整数加 1 映射到和为 2k 的三元组。
这意味着和为 2k 的三元组集合至少和和为 2k-3 的三元组集合一样大。
根据第三部分,由于 2k 是偶数且不小于 6,我们知道我们可以通过从每个整数中减去 1 来将和为 2k 的三元组唯一映射到和为 2k-3 的三元组。
这意味着和为 2k-3 的三元组集合至少和和为 2k 的三元组集合一样大。
因此,两个集合必须具有相同的大小,因此 f(2k-3) = f(2k)。
(v) 设 S ≥ 3,令 P = 2S。证明 (a, b, c) 是和为 P 的三元组,如果且仅如果 a, b, c 中的每一个都严格小于 S
这是一个“如果且仅如果”的证明,所以我需要在两个方向上证明它。
再次假设 a, b, c 是递增的,并且它们的和为 P。
首先,我们需要证明如果 a+b > c,那么 c < S。假设 c ≥ S。然后 a+b > c ≥ S,所以 a+b+c > 2S = P。这是一个矛盾,所以 c < S。
现在我们需要证明如果 c < S,那么 a+b > c。如果 c < S,那么 2S-c > S > c。但是 a+b+c = P = 2S,所以 a+b = 2S-c。因此 a+b > c。
(vi) 对于任何 2 ≤ a ≤ S-1,证明使得 (a, b, P-a-b) 成为一个三元组的可能值的 b 的数量为 a-1
根据第五部分,P-a-b = 2S-a-b ≤ S-1。所以 S-a+1 ≤ b。但同时 b ≤ S-1。因此,对于任何特定的 a 值,b 的值可以在 S-a+1 到 S-1 之间变化。
因此,可能的 b 的总数是 (S-1)-(S-a) = a-1。
(vii) 找到任何大于等于 6 的偶数 P 的 f(P) 的表达式
让 (a, b, P-a-b) 是和为 P 的三元组,其中 P 是偶数且不小于 6。根据第三部分和第五部分,我们知道 a 可以从 2 变到 S - 1,而根据第六部分,对于每个这样的 a 值,都有 a-1 个 b 值。
所以我们的 f(P) 的表达式可以如下推导:

(viii) 找到 f(21)
根据第四部分,f(21) = f(24)。由于 24 是偶数且大于 6,我们可以使用第七部分的新公式,取 S = 12,得到答案是 55。
让我们使用Python 和 R 中的一个简单计数函数来双重检查:
Python
def n_triangular_triples(P):
check = []
for a in range(1, P + 1):
for b in range(1, P - a + 1):
if P - a - b > 0:
sorted_triplet = sorted([a, b, P - a - b])
if sum(sorted_triplet) == P and sorted_triplet[0] + sorted_triplet[1] > sorted_triplet[2]:
check.append(1)
return sum(check)
# 测试 P = 21
result = n_triangular_triples(21)
print(result)
R
# 简单计算和为 P 的三元组的函数
n_triangular_triples <- function(P) {
check <- c()
for (a in 1:P) {
for (b in 1:(P - a)) {
if (P - a - b > 0) {
sorted <- sort(c(a, b, P - a - b))
if ((sum(sorted) == P) && (sorted[1] + sorted[2] > sorted[3])) {
check <- append(check, 1)
}
}
}
}
sum(check)
}
# 测试 P = 21
n_triangular_triples(21)
[1] 55
当然,我们还可以使用我们的新公式来计算更大的 P 的 f(P)。
例如,f(997) = f(1000) = 124,251。
我们可以使用 Python或R 中的函数来检查,如果您愿意等待几秒钟让它遍历所有可能的三元组。
n_triangular_triples(997)
[1] 124251
GPT4 在这方面的表现如何?
并不好,尽管它渴望解释三角不等式定理,但如下所示,它的表现并不理想。我提出了三次问题,得到的答案分别是 100、22 和 190。看来真正的智能没有替代品!
您对这个问题有何看法?欢迎发表评论。
本文由 mdnice 多平台发布
相关文章:

如何从第一性原则的原理分解数学问题
如何从第一性原则的原理分解数学问题 摘要:牛津大学入学考试题目展示了所有优秀数学家都使用的系统的第一原则推理,而GPT4仍然在这方面有困难 作者:Keith McNulty 我们中的许多人都熟悉直角三角形的边的规则。根据毕达哥拉斯定理,…...
实现strstr函数
一个字符串有没有在另一个字符串出现过 char* my_strstr(char* arr1, char* arr2) {char* cp;char* a1;char* a2;cp arr1;while (*cp){a1 cp;a2 arr2;while (*a1 *a2){a1;a2;}if (*a2 \0){return cp;}cp;}return NULL; } int main() {char arr1[] "abbbcdefgi"…...

C语言练习题解析(2)
💓博客主页:江池俊的博客⏩收录专栏:C语言刷题专栏👉专栏推荐:✅C语言初阶之路 ✅C语言进阶之路💻代码仓库:江池俊的代码仓库🎉欢迎大家点赞👍评论📝收藏⭐ 文…...

Element UI 表单验证规则动态失效问题
Element 版本:v2.15.3 问题背景 如下代码所示:有一个上传文件的 input 组件,在更新的时候,如果不上传文件表示不更新,如果要更新则点击 「重新上传」按钮将上传组件显示出来 <el-form ref"form" :mode…...

多线程并发篇
目录 1、线程生命周期 2、线程创建方式 3、Callable 与 Future 4、如何停止一个正在运行的线程 5、notify() 和 notifyAll() 的区别 6、sleep() 和 wait() 的区别 7、start() 和 run() 的区别 8、interrupted 和 isInterruptedd 的区别 9、CyclicBarrier 和 Count…...
pycharm-2023.1 closing project window stuck
pycharm-2023.1 closing project window stuck 问题描述 pycharm 切换项目/重启,一直卡在 closing project 原因分析 PyCharm 2023.1 issue - closing project window stuck (PyPIPackageUtil.lambda$parsePyPIListFromWeb) 解决方案 升级 pycharm 到 2023.3py…...
tkinter编写的打开csdn程序
目录 鬼畜tkinter简介程序代码解析现成总结鬼畜 看看你每次打开CSDN: 1.开机 2.打开浏览器 3.打开CSDN 4.等待 5.完成 我: 1.开机 2.点击%%%按钮 3.等待 4.完成 简单了不知道多少倍 上面的纯属鬼畜,下面正文!!! tkinter tkinter是一个用于创建图形用户界面(GUI)的Py…...
Vue3.2组件如何封装,以弹窗组件的封装为例
以前一直想,每次封装一个弹窗组件的时候,一直特别复杂,父传子,子传父,各种来回绕,来回修改。 一直想如何才能更加简化,但是一直没时间,今天终于抽时间出来封装了一下 本次封装简化…...
Vue知识系列(5)每天10个小知识点
目录 系列文章目录Vue知识系列(1)每天10个小知识点Vue知识系列(2)每天10个小知识点Vue知识系列(3)每天10个小知识点Vue知识系列(4)每天10个小知识点 知识点41.vue常用基本指令有哪些…...
Java基础题08——数组(查找下标所对应的值)
给定一个整数数组,输入一个值 n ,输出 n *在数组中的下标 **(*如果不存在输出 -1 ) 如:int[] arr {3, 2, 1, 4, 5}; 1 输入: 3 输出: 0 2. 输入: 6 输出: -1 int[] arr new int[]{3, 2, 1, 4,…...

LinkedList 源码分析
LinkedList 是一个基于双向链表实现的集合类。 LinkedList 插入和删除元素的时间复杂度 头部插入/删除:只需要修改头结点的指针即可完成插入/删除操作,因此时间复杂度为 O(1)。尾部插入/删除:只需要修改尾结点的指针即可完成插入/删除操作…...
跑步锻炼(蓝桥杯)
跑步锻练 题目描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小蓝每天都锻炼身体。 正常情况下,小蓝每天跑 1 千米。如果某天是周一或者月初(1 日),为了激励自己&#x…...
【SLAM】视觉SLAM简介
【SLAM】视觉SLAM简介 task04 主要了解了SLAM的主流框架,清楚VSALM中间接法与直接法的主要区别在什么地方,其各自的优势是什么,了解前端与后端的关系是什么 1.什么是SLAM 2.VSALM中间接法与直接法的主要区别在什么地方,其各自的…...

Visual Studio2019报错
1- Visual Studio2019报错 错误 MSB8036 找不到 Windows SDK 版本 10.0.19041.0的解决方法 小伙伴们在更新到Visual Studio2019后编译项目时可能遇到过这个错误:“ 错误 MSB8036 找不到 Windows SDK 版本 10.0.19041.0的解决方法”,但是我们明明安装了该…...

ffplay源码解析-PacketQueue队列
包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …...
Flowable主要API介绍
1. ProcessEngine 负责与各个服务进行交互和管理流程的整个生命周期。 方法描述getName()close()startExecutors()启动所有流程引擎中的执行器。执行器用于处理流程实例的执行,在引擎启动时,执行器会自动运行并处理待办任务和定时任务。getRepositorySe…...

TensorFlow与pytorch特定版本虚拟环境的安装
TensorFlow与Python的版本对应,注意,一定要选择对应的版本,否则会让你非常痛苦,折腾很久搞不清楚原因。 建议使用国内镜像源安装 没有GPU后缀的就表示是CPU版本的,不加版本就是最新 pip install tensorflow -i https:…...

【SpringMVC】拦截器JSR303的使用
【SpringMVC】拦截器&JSR303的使用 1.1 什么是JSR3031.2 为什么使用JSR3031.3 常用注解1.4 Validated与Valid区别1.5 JSR快速入门1.5.2 配置校验规则# 1.5.3 入门案例二、拦截器2.1 什么是拦截器2.2 拦截器与过滤器2.3 应用场景2.4 拦截器快速入门2.5.拦截器链2.6登录案列权…...

Java - LambdaQueryWrapper 的常用方法
1、查看项目中是否导入mybatisPlus的jar包 2、servie 层和实现类要集成mybatisPlus service 继承IService<> 实现类中要继承IService的实现类ServiceImpl<mapper,实体类> 3、如果想要mapper中的一些方法,mapper 要继承BaseMapper<实体类> 4、在实…...

Selenium常见问题解析
1、元素定位失败: 在使用Selenium自动化测试时,最常见的问题之一是无法正确地定位元素,这可能导致后续操作失败。解决方法包括使用不同的定位方式(如xpath、CSS selector、id等),等待页面加载完全后再进行…...

RocketMQ延迟消息机制
两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后…...

无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
jmeter聚合报告中参数详解
sample、average、min、max、90%line、95%line,99%line、Error错误率、吞吐量Thoughput、KB/sec每秒传输的数据量 sample(样本数) 表示测试中发送的请求数量,即测试执行了多少次请求。 单位,以个或者次数表示。 示例:…...
Kafka主题运维全指南:从基础配置到故障处理
#作者:张桐瑞 文章目录 主题日常管理1. 修改主题分区。2. 修改主题级别参数。3. 变更副本数。4. 修改主题限速。5.主题分区迁移。6. 常见主题错误处理常见错误1:主题删除失败。常见错误2:__consumer_offsets占用太多的磁盘。 主题日常管理 …...

零知开源——STM32F103RBT6驱动 ICM20948 九轴传感器及 vofa + 上位机可视化教程
STM32F1 本教程使用零知标准板(STM32F103RBT6)通过I2C驱动ICM20948九轴传感器,实现姿态解算,并通过串口将数据实时发送至VOFA上位机进行3D可视化。代码基于开源库修改优化,适合嵌入式及物联网开发者。在基础驱动上新增…...