Python算法100例-4.2 列出真分数序列

完整源代码项目地址,关注博主私信'源代码'后可获取

  • 1.问题描述
  • 2.问题分析
  • 3.算法设计
  • 4.确定程序框架
  • 5.完整的程序
  • 6.拓展训练

1.问题描述

按递增顺序依次列出所有分母为40、分子小于40的最简分数。

2.问题分析

分子和分母只有公因数1的分数,或者说分子和分母是互质数的分数,叫作最简分数,又称既约分数。如2/3、8/9、3/8等就是最简分数。

方法1:求分子小于40的最简分数,可以对分子采用穷举的方法。根据最简分数的定义可知,分子和分母的最大公约数为1,因此可以利用最大公约数的方法,判定分子与40是否构成真分数。

方法2:分子和分母的公因数只有1的分数为最简分数,若分子和分母在1~分子(num2)

3.算法分析

变量num1、num2分别用于存储分母和分子的值。

方法1:

求最大公约数一般采用辗转相除的思想,具体步骤概括如下:

1)用较大的数num1除以较小的数num2,得到的余数存储到变量temp中,即temp=num1%num2。

2)用较小的除数num2和得出的余数temp构成新的一对数,并分别赋值给num1和num2,继续做上面的除法。

3)当num2为0时,num1就是最大公约数;否则重复步骤1和步骤2。

对于辗转相除法的思想将在4.4节详细说明,此处先跳过。

方法2:

分数的分子仍然采用穷举法。对于每一个可能的分子,都要判断在1~num2范围内分数num1/num2除了1之外是否有其他的公因数,循环初值为2。

在2~num2内若有一个数j能同时整除分子、分母,说明此分数不是最简分数,j~num2之间的数也无须再判断,利用break语句结束循环,循环结束时j<num2。循环过程中若没有一个数可以同时整除分子和分母,即条件if(num1%j0)and(num2%j0)不成立,则break语句不执行,循环正常结束,即条件j≤num2不成立,循环结束时j>num2。利用j与num2的大小关系可判断分数是否为最简分数。

4.确定程序框架

辗转相除法求最大公约数的流程图见4.4节,下面给出方法2的流程图,如图4.4所示。

在这里插入图片描述

5.完整的程序

代码1(对应方法1):

# 列出真分数序列——利用辗转相除法
if __name__ == "__main__":
    print("分母为40,分子小于40的最简分数有:")
    n = 0                                           # 计数器,记录最简分数的个数
    for i in range(1, 40):                  # 穷举40以内的全部分子
        num1 = 40                                   # 分母
        num2 = i                            # 分子
        # 采用辗转相除法求出分子与分母的最大公约数
        while num2 != 0:
            temp = num1 % num2
            num1 = num2
            num2 = temp
        if num1 == 1:                       # 若最大公约数为1,则为最简真分数
            n += 1
            print("%2d/40 " %i, end=" ")
            if n % 8 == 0:                  # 每8个一行
                print()
分母为40,分子小于40的最简分数有:
 1/40   3/40   7/40   9/40  11/40  13/40  17/40  19/40  
21/40  23/40  27/40  29/40  31/40  33/40  37/40  39/40  

代码2(对应方法2):

# 列出真分数序列

if __name__ == "__main__":
    print("分母为40,分子小于40的最简分数有:")
    n = 0                                           # 计数器,记录最简分数的个数
    for i in range(1, 40):                  # 穷举40以内的全部分子
        num1 = 40                           # 分母
        num2 = i                            # 分子
        j =2
        while j <= num2:
            # 判断2~num2之间分子和分母是否有公约数
            # 如果有j满足条件,则结束循环,说明此时的分数不是最简分数
            if (num1 % j == 0) and (num2 % j == 0):
                break
            j += 1
        # 如果j > num2,说明2~num2之间没有分子和分母的公约数,分数为最简分数
        if j > num2:
            print("%2d/40  " %i, end=" ")
            n += 1
            if n % 8 == 0:                  # 每行输出8个数
                print()
分母为40,分子小于40的最简分数有:
 1/40    3/40    7/40    9/40   11/40   13/40   17/40   19/40   
21/40   23/40   27/40   29/40   31/40   33/40   37/40   39/40   

6.拓展训练

按递增顺序依次列出所有分母小于等于40的最简真分数。

根据问题描述进行分析后可知,求分母为40、分子小于40的最简分数的算法如上所述;当分母为30,求分子小于30的最简分数思想与上述思想相同,只需将num1的值改为30;分母为39,38,37,…,1时,最简分数也都可用上述方法求得。因此,要求分母小于等于40的最简真分数,只需在上述程序的基础上加一个外层循环来控制分母的取值即可,即添加循环“for k in range(1,40+1)”。
代码如下:
# 列出真分数序列

if __name__ == "__main__":
    print("分母小于等于40的最简分数有:")
    for k in range(1, 40+1):
        num1 = k                                    # 分母
        n = 0                                               # 计数器,记录最简分数的个数
        for i in range(1, num1):            # 穷举40以内的全部分子
            num2 = i                                # 分子
            j = 2
            while j <= num2:
                # 判断2~num2之间分子和分母是否有公约数
                # 如果有j满足条件,则结束循环,说明此时的分数不是最简分数
                if (num1 % j == 0) and (num2 % j == 0):
                    break
                j += 1
            # 如果j > num2,说明2~num2之间没有分子和分母的公约数,分数为最简分数
            if j > num2:
                print("%2d/%2d " %(num2,num1) , end=" ")
                n += 1
                if n % 10 == 0:             # 每行输出8个数
                    print()
        print()

分母小于等于40的最简分数有:

 1/ 2  
 1/ 3   2/ 3  
 1/ 4   3/ 4  
 1/ 5   2/ 5   3/ 5   4/ 5  
 1/ 6   5/ 6  
 1/ 7   2/ 7   3/ 7   4/ 7   5/ 7   6/ 7  
 1/ 8   3/ 8   5/ 8   7/ 8  
 1/ 9   2/ 9   4/ 9   5/ 9   7/ 9   8/ 9  
 1/10   3/10   7/10   9/10  
 1/11   2/11   3/11   4/11   5/11   6/11   7/11   8/11   9/11  10/11  

 1/12   5/12   7/12  11/12  
 1/13   2/13   3/13   4/13   5/13   6/13   7/13   8/13   9/13  10/13  
11/13  12/13  
 1/14   3/14   5/14   9/14  11/14  13/14  
 1/15   2/15   4/15   7/15   8/15  11/15  13/15  14/15  
 1/16   3/16   5/16   7/16   9/16  11/16  13/16  15/16  
 1/17   2/17   3/17   4/17   5/17   6/17   7/17   8/17   9/17  10/17  
11/17  12/17  13/17  14/17  15/17  16/17  
 1/18   5/18   7/18  11/18  13/18  17/18  
 1/19   2/19   3/19   4/19   5/19   6/19   7/19   8/19   9/19  10/19  
11/19  12/19  13/19  14/19  15/19  16/19  17/19  18/19  
 1/20   3/20   7/20   9/20  11/20  13/20  17/20  19/20  
 1/21   2/21   4/21   5/21   8/21  10/21  11/21  13/21  16/21  17/21  
19/21  20/21  
 1/22   3/22   5/22   7/22   9/22  13/22  15/22  17/22  19/22  21/22  

 1/23   2/23   3/23   4/23   5/23   6/23   7/23   8/23   9/23  10/23  
11/23  12/23  13/23  14/23  15/23  16/23  17/23  18/23  19/23  20/23  
21/23  22/23  
 1/24   5/24   7/24  11/24  13/24  17/24  19/24  23/24  
 1/25   2/25   3/25   4/25   6/25   7/25   8/25   9/25  11/25  12/25  
13/25  14/25  16/25  17/25  18/25  19/25  21/25  22/25  23/25  24/25  

 1/26   3/26   5/26   7/26   9/26  11/26  15/26  17/26  19/26  21/26  
23/26  25/26  
 1/27   2/27   4/27   5/27   7/27   8/27  10/27  11/27  13/27  14/27  
16/27  17/27  19/27  20/27  22/27  23/27  25/27  26/27  
 1/28   3/28   5/28   9/28  11/28  13/28  15/28  17/28  19/28  23/28  
25/28  27/28  
 1/29   2/29   3/29   4/29   5/29   6/29   7/29   8/29   9/29  10/29  
11/29  12/29  13/29  14/29  15/29  16/29  17/29  18/29  19/29  20/29  
21/29  22/29  23/29  24/29  25/29  26/29  27/29  28/29  
 1/30   7/30  11/30  13/30  17/30  19/30  23/30  29/30  
 1/31   2/31   3/31   4/31   5/31   6/31   7/31   8/31   9/31  10/31  
11/31  12/31  13/31  14/31  15/31  16/31  17/31  18/31  19/31  20/31  
21/31  22/31  23/31  24/31  25/31  26/31  27/31  28/31  29/31  30/31  

 1/32   3/32   5/32   7/32   9/32  11/32  13/32  15/32  17/32  19/32  
21/32  23/32  25/32  27/32  29/32  31/32  
 1/33   2/33   4/33   5/33   7/33   8/33  10/33  13/33  14/33  16/33  
17/33  19/33  20/33  23/33  25/33  26/33  28/33  29/33  31/33  32/33  

 1/34   3/34   5/34   7/34   9/34  11/34  13/34  15/34  19/34  21/34  
23/34  25/34  27/34  29/34  31/34  33/34  
 1/35   2/35   3/35   4/35   6/35   8/35   9/35  11/35  12/35  13/35  
16/35  17/35  18/35  19/35  22/35  23/35  24/35  26/35  27/35  29/35  
31/35  32/35  33/35  34/35  
 1/36   5/36   7/36  11/36  13/36  17/36  19/36  23/36  25/36  29/36  
31/36  35/36  
 1/37   2/37   3/37   4/37   5/37   6/37   7/37   8/37   9/37  10/37  
11/37  12/37  13/37  14/37  15/37  16/37  17/37  18/37  19/37  20/37  
21/37  22/37  23/37  24/37  25/37  26/37  27/37  28/37  29/37  30/37  
31/37  32/37  33/37  34/37  35/37  36/37  
 1/38   3/38   5/38   7/38   9/38  11/38  13/38  15/38  17/38  21/38  
23/38  25/38  27/38  29/38  31/38  33/38  35/38  37/38  
 1/39   2/39   4/39   5/39   7/39   8/39  10/39  11/39  14/39  16/39  
17/39  19/39  20/39  22/39  23/39  25/39  28/39  29/39  31/39  32/39  
34/39  35/39  37/39  38/39  
 1/40   3/40   7/40   9/40  11/40  13/40  17/40  19/40  21/40  23/40  
27/40  29/40  31/40  33/40  37/40  39/40  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/488687.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《手把手教你》系列技巧篇(五十四)-java+ selenium自动化测试-上传文件-中篇(详细教程)

1.简介 在实际工作中&#xff0c;我们进行web自动化的时候&#xff0c;文件上传是很常见的操作&#xff0c;例如上传用户头像&#xff0c;上传身份证信息等。所以宏哥打算按上传文件的分类对其进行一下讲解和分享。 2.为什么selenium没有提供API&#xff1f; 想必小伙伴们或者…

【学习】软件测试人员如何设计出优秀的测试用例

在软件开发的过程中&#xff0c;测试用例如同工程质量的守护者&#xff0c;它们的存在确保了软件产品的稳定性和可靠性。然而&#xff0c;如何设计出优秀的测试用例&#xff0c;让其在千变万化的软件世界中独领风骚&#xff0c;成为众多测试工程师追寻的目标。本文将为你揭示其…

9、垃圾回收器

为什么分代GC算法要把堆分成年轻代和老年代&#xff1f;首先我们要知道堆内存中对象的特性&#xff1a; 系统中的大部分对象&#xff0c;都是创建出来之后很快就不再使用可以被回收&#xff0c;比如用户获取订单数据&#xff0c;订单数据返回给用户之后就可以释放了。老年代中…

小红书矩阵批量发布工具,一键发布笔记软件

昨日&#xff0c;我收到了一条充满渴望与期待的私信&#xff0c;来自一位小红书的矩阵账号博主。他手握多个账号&#xff0c;渴望寻找一款能够助力他批量发布笔记的神器&#xff0c;每日能够轻松达到百篇的发布量。这份迫切的需求&#xff0c;我深感体会&#xff0c;因为这正是…

看漫画学Python:有趣好玩

书籍介绍 Python是一门既简单又强大的编程语言&#xff0c;被广泛应用于数据分析、大数据、网络爬虫、自动化运维、科学计算和人工智能等领域。Python也越来越重要&#xff0c;成为国家计算机等级考试科目&#xff0c;某些中小学也开设了Python编程课程。本书秉承有趣、有料、…

个人周总结

个人周总结&#xff1a; 对于总体方向目标的完成&#xff0c;完成的不是很好&#xff0c;这周内的很多天都在游离&#xff0c;就是事情可能有需要做的&#xff0c;但是动力不很足&#xff0c;期间就是有点摆烂了。后面及时调整调整吧&#xff0c;有这种情况&#xff0c;一个原…

Qt实现简易的多线程TCP服务器(附源码)

目录 一.UI界面的设计 二.服务器的启动 三.实现自定义的TcpServer类 1.在widget中声明自定义TcpServer类的成员变量 2.在TcpServer的构造函数中对于我们声明的m_widget进行初始化&#xff0c;m_widget我们用于后续的显示消息等&#xff0c;说白了就是主界面的更新显示等 …

从人工智能入门到理解ChatGPT的原理与架构的第一天(First)(含机器学习特征工程详解)

目录 一.ChatGPT的发展历程 二.Attention is all you need 三.对于GPT-4的智能水平评估 四.大语言模型的技术演化 1.从符号主义到连接主义 2.特征工程 2.1数据探索 2.2数据清洗 2.3数据预处理 2.3.1无量纲化 2.3.1.1标准化 2.3.1.2区间缩放法 2.3.1.3标准化与归一…

Android开发简易登录界面

title: Android开发第四天 search: 2024-03-22 tags: Android开发 Android开发简易登录界面 文章目录 Android开发简易登录界面一、定义style样式二、完成 activity_main.xml 界面具体设计三、代码简述 背景 &#xff1a;在初学 android 开发的时候&#xff0c;为了尽量熟悉学…

RSTP环路避免实验(思科)

华为设备参考&#xff1a;RSTP环路避免实验&#xff08;华为&#xff09; 一&#xff0c;技术简介 RSTP (Rapid Spanning Tree Protocol) 是从STP发展而来 • RSTP标准版本为IEEE802.1w • RSTP具备STP的所有功能&#xff0c;可以兼容STP运行 • RSTP和STP有所不同 减少了…

新书速览|Django 5企业级Web应用开发实战:视频教学版

掌握Django框架开发技能&#xff0c;实战投票应用系统和内容管理系统 本书内容 《Django 5企业级Web应用开发实战&#xff1a;视频教学版》精选当前简单、实用和流行的Django实例代码&#xff0c;帮助读者学习和掌握Django 5框架及其相关技术栈的开发知识。本书系统全面、内容…

深入解析MySQL的四种打开方式

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

伦敦金与纸黄金有什么区别?怎么选?

伦敦金与纸黄金都是与黄金相关的投资品种&#xff0c;近期黄金市场的上涨吸引了投资者的关注&#xff0c;那投资者想开户入场成为黄金投资者应该选择纸黄金还是伦敦金呢&#xff1f;两者有何区别呢&#xff1f;下面我们就来讨论一下。 伦敦金是一种起源于伦敦的标准化黄金交易合…

2015年认证杯SPSSPRO杯数学建模A题(第一阶段)绳结全过程文档及程序

2015年认证杯SPSSPRO杯数学建模 A题 绳结 原题再现&#xff1a; 给绳索打结是人们在日常生活中常用的技能。对登山、航海、垂钓、野外生存等专门用途&#xff0c;结绳更是必不可少的技能之一。针对不同用途&#xff0c;有多种绳结的编制方法。最简单的绳结&#xff0c;有时称…

Go第三方框架--gin框架(一)

序言 Gin框架作为go语言使用最多的web框架&#xff0c;以其快速的响应速度和对复杂http路由配置的支持受到程序员和媛们的喜爱&#xff0c;几乎统治了web市场。但作为一名合格的程序员&#xff0c;要知其然更要知其所以然&#xff0c;不然八股文背的也没有啥意思。本着这个原则…

【Java程序设计】【C00372】基于(JavaWeb)Springboot的社区网格化管理系统(有论文)

TOC 博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;博客中有上百套程序可供参考&#xff0c;欢迎共同交流学习。 项目简介 项目获取 &#x1f345;文末点击卡片…

工业互联网下的增强现实

工业互联网下的增强现实 1、 概述 增强现实&#xff08;Augmented Reality&#xff0c;简称AR&#xff09;&#xff0c;增强现实技术也被称为扩增现实&#xff0c;AR增强现实技术是促使真实世界信息和虚拟世界信息内容之间综合在一起的较新的技术内容&#xff0c;其将原本在现…

Apache SeaTunnel和SeaTunnel Web 安装部署

Apache SeaTunnel和SeaTunnel Web 安装部署 前面我们介绍已经介绍过了Apache SeaTunnel,这里我们看一下SeaTunnel 的安装部署,早期的SeaTunnel 是没有web 页面的,只能在命令行里使用,现在SeaTunnel 已经有了web 端了,这就降低了我们的使用门槛 下载配置 我们可以去下面的…

如何理解TCP/IP协议?

一、是什么 TCP/IP&#xff0c;传输控制协议/网际协议&#xff0c;是指能够在多个不同网络间实现信息传输的协议簇 TCP&#xff08;传输控制协议&#xff09; 一种面向连接的、可靠的、基于字节流的传输层通信协议 IP&#xff08;网际协议&#xff09; 用于封包交换数据网络…

2024年最新阿里云服务器价格表_CPU内存+磁盘+带宽价格

2024年阿里云服务器租用费用&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核4G服务…