我在项目之间决定重新审视一个古老的数学问题——科拉茨猜想。由于除了 Arduino IDE,我没有任何其他 C++ 开发环境,所以平台的选择很简单——Arduino IDE 和 Arduino 微控制器。编码很简单,除了我的个人电脑和微控制器,我不需要任何其他组件——没有电线、LED、继电器、蜂鸣器、伺服系统等。
如果您对数学感兴趣,即使是初级水平,那么您可能会发现这篇文章很有趣。
Collatz 猜想是一组非常容易遵循的关于正整数(整数)的规则。这个猜想说,如果你取任何正整数并应用以下规则:
1.如果整数是奇数则乘以3加1,否则
2. 如果整数是偶数则除以 2 和
3. 如果任一步骤的结果大于1,重复以上两步。
然后产生的序列最终收敛(折叠)到 1,无论正整数的起始选择如何,无论大小。
例如,让我们选择整数 11 作为我们的起始值。然后,如果我们应用上述规则,我们将生成序列:
11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1
让我们尝试另一个数字,比如 3412。生成的序列是:
3412, 1706, 853, 2560, 1280, 640, 320, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1
对于您选择的任何正整数,它都会像这样工作!卓越。
目前,Collatz 猜想尚未针对所有正整数得到证明。从表面上看,这个猜想看起来很简单,但它在数论中有着非常深厚的根基,自从它于 1937 年由 Lothar Collatz 首次提出以来,已经挑战了许多伟大的数学家。互联网上有很多关于 Lothar Collatz 和他的猜想的信息,如果激发您的兴趣,然后进行一些研究 - 您很快就会发现它隐藏的复杂性!
不过,对于本文,我们只关心使用 Arduino 微控制器运行一个短程序,该程序为任何给定用户提供的正整数生成 Collatz 序列。除了将微控制器插入运行您的 IDE 的 pc 并打开串行监视器之外,只需配置即可。任何 Arduino 微控制器都应该适用。
所以加载并尝试一些正整数,或大或小。我想你会惊讶于一些小数字如何产生长序列而一些大数字如何产生短序列。尝试几次后,您会注意到所有序列如何收敛产生 1 的共同点。
设置再简单不过了:
程序循环运行,可以用同样的方式输入更多的数字。
当您探索了许多示例并确信该猜想确实将所有示例序列折叠为 1 时,请探索串行绘图仪而不是串行监视器。
如果您选择串行绘图仪(从 IDE 工具菜单)而不是串行监视器,那么生成的是一个显示 Collatz 序列“形状”的图形。不幸的是,串行绘图仪没有明确的按钮/功能,因此您需要关闭它并在每个序列之间重新打开它,但它确实提供了另一个关于猜想的有趣观察。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !