100个python算法超详细讲解:角谷猜想

2023-05-16

1.问题描述
角谷猜想在西方常被称为西拉古斯猜想,据说这个问题首先是在
美国的西拉古斯大学被研究的,而在东方,这个问题则由将它带到日
本的日本数学家角谷静夫的名字来命名,故被称为角谷猜想。
角谷猜想的内容是任给一个自然数,若为偶数则除以2,若为奇数
则乘以3再加1,这样得到一个新的自然数之后再按照前面的法则继续
演算,若干次以后得到的结果必然为1。在数学文献里,角谷猜想也常
常被称为“3X+1问题”。请编程验证角谷猜想。
2.问题分析
先通过几个实例来理解角谷猜想的含义。
取自然数n=6,则根据角谷猜想,有:
6→3→10→5→16→8→4→2→1。
最终结果为1,则n=6时角谷猜想成立。
取自然数n=15,则根据角谷猜想,有:
15→46→23→70→35→106→53→160→80→40→20→10→5→16→
8→4→2→1。
最终结果为1,则n=15时角谷猜想成立。
读者还可取其他的自然数按照上述规则来演算,结果都为1。
虽然角谷猜想还未获得一般的证明,但是已经有人拿各种各样的
数字来进行试验,结果发现角谷猜想总是成立的,现在已经获得验证
的最大数是1 099 511 627 776。
3.算法分析
角谷猜想中已经明确地给出了处理过程,即对于给定的自然数n,
有如下函数:

在问题分析中进行的变换,实际上是对函数C进行迭代。则问题可
表述为:从任意一个自然数开始,经过对函数C有限次的迭代,能否最
终得到1。
算法不需要特别的设计,根据函数C可直接进行角谷猜想的验证。
4.确定程序框架
在main()函数中构建一个不定次数的while循环。定义变量n表示输
入的自然数,在循环体中判断n的奇偶性并根据奇偶性的不同执行不同
的操作,当n=1时,退出while循环。while循环结构如下:

while n != 1: # 当n=1时终止循环
# 若n为奇数,则乘以3加1
if n % 2 == 1:
n = n * 3 + 1
count += 1
# 输出执行步骤
print("[%d]: %d * 3 + 1 = %d "
%(count, (n-1)//3, n))
else:
n //= 2 # 若n为偶数,则直接除以2
count += 1
print("[%d]: %d / 2 = %d " %(count,
2 * n, n)) # 输出执行步骤

 程序的流程图如图10.9所示。

5.完整的程序
根据上面的分析,编写完整的程序如下:

#!/usr/bin/python3
# -*- coding: utf-8 -*-
# @author : liuhefei
# @desc: 角谷猜想
# 任给一个自然数,若为偶数则除以2,若为奇数则乘以3再加1
# 这样得到一个新的自然数之后再按照前面的法则继续演算,若干次以后得到的结果必然为1
if __name__ == "__main__":
count = 0
n = int(input("请输入一个自然数:"))
while n != 1: # 当n=1时终止循环
if n % 2 == 1: # 若n为奇数,则乘以3加1
n = n * 3 + 1
count += 1
# 输出执行步骤
print("[%d]: %d * 3 + 1 = %d " %(count, (n-1)//3, n))
else:
n //= 2 # 若n为偶数,则直接除以2
count += 1
print("[%d]: %d / 2 = %d " %(count, 2 * n, n)) # 输出执行步骤

 6.运行结果
在PyCharm下运行程序,结果如图10.10所示。在图10.10a中打印出
了n=6时按照角谷猜想的执行步骤,最后结果为1;在图10.10b中打印出
了n=15时按照角谷猜想的执行步骤,最后结果也为1。因此,它们都符
合角谷猜想的结论。读者也可以任意输入其他自然数进行验证。

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

100个python算法超详细讲解:角谷猜想 的相关文章

  • CentOS7 64位安装solr7.2.0

    声明 xff1a 本人为学习solr的新手 xff0c 如编写过程中有部队的地方还请各位大佬指正 本文为原创 xff0c 如要转载请注明出处 你能学到 xff1a 1 linux上solr的安装部署 xff0c 官方给出的运行方式 2 添加
  • 阿里巴巴20121009 研发/算法工程师 笔试试题【修正】

    第19题 a i 在排序后的位置是 i k i 43 k xff0c a i 43 2k 在排序后的位置是 i 43 k i 43 3k xff0c 必然有a i lt 61 a i 43 2k 所以数组a里实际上有2k个各自有序的 交错的
  • printf() % lf出错

    printf 函数中不存在 lf xff0c 输入 double 用 lf 输出用 f
  • 奔腾系列的CPU 和酷睿系列的CPU

    以后奔腾要沦为中下层产品 奔腾D是接替奔腾4的型号 也是INTEL的第一代双核处理器 技术还比较粗糙 发热量控制的也不够好 至于酷睿系列 这可是INTEL的最新力作 性能上有绝对的优势 技术上也对老对手AMD保持了领先 而且功耗控制的也非常
  • 为什么神经网络被称为黑匣子

    数学层面 xff1a 由于网络参数与近似的数学函数之间缺乏明确的连接 xff0c 人工神经网络通常被称为 黑匣子
  • 第八弹 ROS发布者Publisher的编程实现

    1 话题模型 xff08 发布与订阅 xff09 2 创建功能包 catkin create pkg learning topic roscpp rospy std msgs geometry msgs turtlesim 建立一个名为le
  • TRIZ创新思维方法_简要复习

    一 TRIZ介绍 TRIZ理论成功地揭示了创造发明的内在规律和原理 xff0c 着力于澄清和强调系统中存在的矛盾 xff0c 其目标是完全解决矛盾 xff0c 获得最终的理想解 它不是采取折中或者妥协的做法 xff0c 而且它是基于技术的发
  • Generalized Focal Loss: Learning Qualified and Distributed BBoxes for Dense Object Detection论文翻译阅读

    Generalized Focal Loss Learning Qualified and Distributed Bounding Boxes for Dense Object Detection论文翻译阅读 论文下载地址 xff1a 点
  • ubuntu16.04对SD卡进行分区

    赶在2020年上半年的最后一天 xff0c 匆忙地写上一个博客 这篇博客是对自己的一个反思 xff0c 我的博客属于自己完全开辟的内容几很少 xff0c 有些博客大家随便在网上一搜就能找到 说实话 xff0c 有时候我会怀疑自己的智商有问题
  • RT-thread移植指南-RISC-V

    目录 RT thread移植指南 RISC V 1 概述 1 1 移植资料参考 1 2 移植开发环境准备 2 移植步骤 2 1 全局中断开关函数 2 2 线程上下文切换函数 2 3 线程栈的初始化 2 4 时钟节拍的配置 2 5 中断函数
  • 寒假学习心得--从0开始学破解

    寒假学习心得 从0开始学破解 写给和我一样将要接触或者才接触破解 的朋友们 前提 你必须得真正喜欢 她 一 工欲善其事 必先利其器 1 找一个中文版的OD PEID 记得就OD就有咱PYG版的某牛人强化版的等等等等 找一个合适的工具 干起事
  • 常用的“密码重置”代码

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • ORACLE多表查询优化

    转自某地 对作者很愧疚 不晓得地址了 ORACLE 多表查询优化 这里提供的是执行性能的优化 而不是后台数据库优化器资料 参考数据库开发性能方面的各种问题 收集了一些优化方案统计如下 当然 象索引等优化方案太过简单就不列入了 嘿嘿 执行路径
  • Word to PDF Converter v3.0 算法分析及注册机

    Word to PDF Converter v3 0算法分析及注册机 详细过程 1 xff0c 主程序在C Program Files doc2pdf DOC2PDF dll xff0c PEID查壳为ASProtect 1 23 RC1
  • 安全策略调整步骤

    1 修改防火墙 xff0c 保留22 SSHD 8081 APACHE 80 关闭端口443 HTTPS 3306 MYSQL 8080 8088 53 123 2 针对PHP的BUG和安全漏洞 xff0c 只有升级版本一途 xff0c 经
  • 获取微信openid(或昵称头像)的授权登录及其代理

    lt php 本页用于微信授权登录及其代理 64 version V2 0 64 author ty1921 lt ty1921 64 gmail com gt 64 param backurl 传get参数backurl xff0c 则授
  • 常用的PHP文件头和HTML5文件头(含移动端)

    lt php PHP Header Created by ty1921 64 gmail com Ver V1 Date 2017 8 18 1 session session start 2 display errors ini set
  • VB+PHP实现在线修改Windows服务器的配置文件

    本文仅供记录 存档备案用 用途 xff1a 某电话转接系统 xff0c 需要每天修改配置文件 并重启服务端程序 原理 xff1a WEB用于展示修改界面 xff0c 提交 保存配置文件的相关数据 VB端用于定时轮训WEB上保存的数据 xff
  • OLLVM分析

    一 LLVM是什么 LLVM最初是Low Level Virtual Machine的缩写 xff0c 定位是一个 xff0c 但是是比较底层的虚拟机 然而LLVM本身并不是一个完整的编译器 xff0c LLVM是一个编译器基础架构 xff
  • A General Optimization-based Framework for Local Odometry Estimation with Multiple Sensors论文翻译整理

    综述部分 x1f4cc 多传感器融合有两个趋势 xff1a 基于滤波的融合 xff08 MSCKF EKF UKF xff09 基于优化的滤波 xff08 BA xff09 基于滤波器的方法对时间同步很敏感 任何迟来的测量都会引起麻烦 xf

随机推荐

  • 按键精灵的5级开发认证,笔试题参考

    4题是抄的 xff0c 只是为了过级 最后得93分 xff0c 可能代码还是不够最优 xff0c 有看出的大大希望能不吝指点 1 写一个脚本 xff0c 要求启动时 xff0c 记录 xff08 录制 xff09 当前鼠标的移动轨迹 xff
  • 常见端口号和对应服务的概念和作用

    端口号的主要作用是表示一台计算机中的特定进程所提供的服务 网络中的计算机是通过IP地址来代表其身份的 xff0c 它只能表示某台特定的计算机 xff0c 但是一台计算机上可以同时提供很多个服务 xff0c 如数据库服务 FTP服务 Web服
  • 51单片机学习历程---单片机入门

    主要用来做控制的 xff0c 如果要驱动外部设备的话 xff0c 需要使用驱动电路 proteus 模拟 51 8位 最小系统 晶振电路 提供时钟 12M xff08 方便计算机器周期 xff09 11 0592M xff08 非常适合串行
  • 手把手教你使用--常用模块--HC05蓝牙模块,无线蓝牙串口透传模块,(实例:手机蓝牙控制STM32单片机点亮LED灯)

    最近在学STM32 xff0c 基本的学完了 xff0c 想学几个模块来巩固一下知识 xff0c 就想到了蓝牙模块 玩啥好难过有很多博客教怎么连的 xff0c 但自己看起来还是有点糊涂 模块的原理和知识点我就不讲解了 xff0c 这里我主要
  • FreeRTOS实时操作系统----机制

    四 机制 目录 四 机制 4 1任务优先级 4 1 1高优先级抢占低优先级 4 1 2时间片 4 2任务调度器 4 3临界段的保护 4 4空闲任务与阻塞延时 4 5任务延时列表 4 6消息队列 4 6 1消息队列的基本概念 4 6 2消息队
  • 三极管导通条件

    NPN三极管 xff0c 箭头朝外 xff1a 高电平导通 PNP三极管 xff0c 箭头朝里 xff1a 低电平导通
  • 74HC1G66模拟开关,多路复用

    SEL为低电平的时候 xff0c SD导通 SEL为高电平的时候 xff0c SD不导通 直接看数据手册
  • 一张图了解MOS管导通条件

    不管他长什么样 xff0c 直接就看箭头指向 箭头向栅极 xff0c 就是nmos管 xff0c 高电平导通 箭头向外 xff0c 就是pmos管 xff0c 低电平导通 一边连了两根线的就是s极
  • Android SDK的安装配置

    SDK xff1a xff08 software development kit xff09 软件开发工具包 被软件开发工程师用于为特定的软件包 软件框架 硬件平台 操作系统等建立应用软件的开发工具的集合 因此 xff0c Android
  • 1.C++简介

    学习目标 xff1a 初识C 43 43 xff0c 介绍C 43 43 一些简单的语法 xff1a 初识C 43 43 数据类型 运算符 程序流程结构 学习内容 xff1a 1 初识C 43 43 一个简单的C 43 43 框架 xff0
  • 死锁形成的原因和四个必要条件

    死锁的概念 死锁是指两个或两个以上的进程 xff08 线程 xff09 在运行过程中因争夺资源而造成的一种僵局 xff0c 若无外力作用 xff0c 这些进程 xff08 线程 xff09 都将无法向前推进 xff0c 这时就形成了死锁 处
  • Android P阻止调用非sdk api后,Atlas该何去何从

    0 背景 自从Android 9 0后 xff0c Android就已经开始着手阻止app开发调用非sdk的api xff0c 也就是被标记为 64 hide的变量 函数 类不可以通过反射调用 xff0c 否则会提示NoSuchMethod
  • 简历应该这么写!

    很多同学刚开始找工作时 xff0c 投出去很多简历 xff0c 但是都石沉大海了 xff0c 没有后文 之所以简历不通过 xff0c 往往都是简历不够 好看 很多大公司HR经常一天要看几百份 xff0c 甚至上千份简历 xff0c 基本都是
  • 希望计算机专业同学都知道这些老师

    C语言教程 翁凯老师 赫斌 翁恺老师是土生土长的浙大码农 xff0c 从本科到博士都毕业于浙大计算机系 xff0c 后来留校教书 xff0c 一教就是20多年 翁恺老师的c语言课程非常好 xff0c 讲解特别有趣 xff0c 很适合初学者学
  • 100个python算法超详细讲解:抓交通肇事犯

    1 xff0e 问题描述 一辆卡车违反交通规则 xff0c 撞人后逃跑 现场有三人目 该事件 xff0c 但都 没有记住车号 xff0c 只记下了车号的一些特征 说 xff1a 牌照的前两位数字是相 同的 xff1b 乙说 xff1a 牌照
  • 100个python算法超详细讲解:百钱百鸡

    1 xff0e 问题描述 中国古代数学家张丘建在他的 算经 中提出了一个著名的 百钱 百鸡问题 xff1a 一只公鸡值五钱 xff0c 一只母鸡值三钱 xff0c 三只小鸡值一钱 xff0c 现 在要用百钱买百鸡 xff0c 请问公鸡 母鸡
  • 100个python算法超详细讲解:水仙花数

    1 xff0e 问题描述 输出所有的 水仙花数 所谓的 水仙花数 是指一个三位数 xff0c 其各位数字的立方 和等于该数本身 xff0c 例如 xff0c 153是 水仙花数 xff0c 因为153 61 1 3 43 1 3 43 3
  • 100个python算法超详细讲解:常胜将军

    100个python算法超详细讲解 64 谷歌学术 1 xff0e 问题描述 有火柴21根 xff0c 两人依次取 xff0c 每次每人只可取走1 xff5e 4根 xff0c 不能多取 xff0c 也不能不取 xff0c 谁取到最后一根火
  • 100个python算法超详细讲解:逆序输出数字

    100个python算法超详细讲解 64 谷哥技术 1 xff0e 问题描述 编程实现将输入的整数逆序输出 2 xff0e 问题分析 前面我们已经接触过很多的递归问题了 xff0c 这些递归问题可以简单 地分成两类 xff1a 一类可以归结
  • 100个python算法超详细讲解:角谷猜想

    1 xff0e 问题描述 角谷猜想在西方常被称为西拉古斯猜想 xff0c 据说这个问题首先是在 美国的西拉古斯大学被研究的 xff0c 而在东方 xff0c 这个问题则由将它带到日 本的日本数学家角谷静夫的名字来命名 xff0c 故被称为角