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

news2024/11/14 14:09:40

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

  • 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  

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Maven发布开源框架到远程仓库

1.背景 当你写了一个自我感觉良好的开源工具希望给他人分享&#xff0c;如果只是在github等网站进行公布之外&#xff0c;用户使用起来还不是很方便&#xff0c;特别是当你提供是特定领域的基础工具。你还可以把它部署到中央仓库&#xff0c;这样别人使用就会方便很多。接下来…

android_uiautomator元素定位

通过UIAUTOMATOR的text属性定位到元素&#xff0c;并打印文本from appium import webdriver from appium.webdriver.common.appiumby import AppiumBy import time # For W3C actions from selenium.webdriver.common.action_chains import ActionChains from selenium.webdriv…

Kafka总结问题

Kafka Kafka Kafka Kafka的核心概念/ 结构 topoic Topic 被称为主题&#xff0c;在 kafka 中&#xff0c;使用一个类别属性来划分消息的所属类&#xff0c;划分消息的这个类称为 topic。topic 相当于消息的分配标签&#xff0c;是一个逻辑概念。主题好比是数据库的表&#xff0…

AI视频激光综合驱鸟装置:全自动、大范围驱鸟 | 真驱鸟科技

在电力系统中&#xff0c;鸟害事故已成为一个不容忽视的问题&#xff0c;直接威胁到电网的正常运行。但鸟类拥有极强的环境适应能力&#xff0c;它们能够在各种环境中生存和繁衍。这种强大的适应性使得传统的单一功能驱鸟器&#xff0c;在面对鸟类时显得力不从心&#xff0c;无…

Github简单入门教程

文章目录 使用前提查看项目内容查看项目介绍打包下载项目查看项目作者项目搜索复制项目分支项目创建向项目中添加文件对项目进行评论 使用前提 想要使用Github&#xff0c;首先需要学会科学上网&#xff0c;不然用国内的网在正规情况下是无法访问Github滴~ 查看项目内容 打开…

【Pt】马灯贴图绘制过程 01-制作基础色

目录 一、导入模型并烘焙 二、制作基础底漆 &#xff08;1&#xff09;底漆层 &#xff08;2&#xff09;水痕层 &#xff08;3&#xff09;指纹层 一、导入模型并烘焙 1. 导入模型&#xff0c;马灯模型如下所示 2. 在纹理集设置中点击“烘焙模型贴图” 设置输出大小为…

使用 Amazon Bedrock + Claude 3 打造个性化智能编程助手

最近&#xff0c;随着人工智能技术的迅速发展&#xff0c;代码助手已经成为软件开发领域备受关注的工具。像 Amazon CodeWhisperer 和 Github Copilot 这样的工具可以在集成开发环境中帮助用户自动生成代码&#xff0c;极大地提高了开发效率。然而&#xff0c;这些助手通常缺乏…

HarmonyOS 健康系统联系案例 创建项目

上文 HarmonyOS 健康系统联系案例 整体原型图介绍 我们 介绍了健康系统的整体 UI 然后 我们一点一点来 今天先搭个环境 首先 我们打开开发工具首页 创建项目 一个非常令人怀念的步骤啊 我们点击 Create Project 创建一个新的工程 模板 还是选最基础的 Empty Ability 然后 …

【鸿蒙HarmonyOS开发笔记】使用@Preview装饰器预览组件

概述 ArkTS应用/服务支持组件预览&#xff0c;要求compileSdkVersion为8或以上。组件预览支持实时预览&#xff0c;不支持动态图和动态预览。组件预览通过在组件前添加注解Preview实现&#xff0c;在单个源文件中&#xff0c;最多可以使用10个Preview装饰自定义组件。 Preview…

[C++]函数重载(什么是函数重载,函数重载的原理(底层怎么实现))

一、什么是函数重载 函数重载是指在同一作用域内&#xff0c;可以有多个功能类似具有相同函数名&#xff0c;不同参数列表&#xff08;包括参数类型、参数个数、参数顺序&#xff09;的函数。编译器会根据函数调用时提供的参数来决定调用哪一个具体的函数。 注意&#xff1a;只…

洛谷_P1102 A-B 数对_python写法

P1102 A-B 数对 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 解法一&#xff1a; n, c map(int,input().split())data list(map(int,input().split())) data.sort() maxx max(data)sum 0 l [0 for _ in range(maxx1)] for i in data:l[i] 1 for b in range(1, maxx1)…

漏洞扫描-让安全弱点无所遁形

随着信息技术的迅猛发展和互联网的广泛普及&#xff0c;网络安全问题日益凸显。在这个数字化的世界里&#xff0c;无论是企业还是个人&#xff0c;都面临着前所未有的安全威胁。安全漏洞&#xff0c;作为这些威胁的源头&#xff0c;常常被忽视或无法及时发现。 而漏洞扫描&…

VBA技术资料MF133:隐藏编辑栏及计算字符串

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

20240319-1-过拟合与欠拟合

过拟合欠拟合面试题 1. 如何理解高方差与低偏差? 模型的预测误差可以分解为三个部分: 偏差(bias)&#xff0c; 方差(variance) 和噪声(noise). 偏差 偏差度量了模型的期望预测与真实结果的偏离程度&#xff0c; 即刻画了学习算法本身的拟合能力。偏差则表现为在特定分布上…

二叉树|236.二叉树的最近公共祖先

力扣题目链接 class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root q || root p || root NULL) return root;TreeNode* left lowestCommonAncestor(root->left, p, q);TreeNode* right lowestCommonAncesto…

智慧工地源码 数字孪生可视化大屏 工地管理平台系统源码 多端展示(PC端、手机端、平板端)

智慧工地源码 数字孪生可视化大屏 工地管理平台系统源码 多端展示&#xff08;PC端、手机端、平板端&#xff09; 智慧工地系统多端展示&#xff08;PC端、手机端、平板端&#xff09;;数字孪生可视化大屏&#xff0c;一张图掌握项目整体情况;使用轻量化模型&#xff0c;部署三…

IPhone让用户升级?网友你咋不降点!

最近一个热搜刷屏了我的朋友圈&#xff0c;我点开一看是苹果上架了全新“换代有来”页面&#xff0c;其主要表达了苹果用户可以将旧的iphone升级到全新的iphoe15上。并告诉贴心的给网友对比了一下换代的好处。 并且还详细了说了一些iPhone 11、11 Pro、11 Pro Max、12、12 mini…

flutter使用Command库调用cmd命令或者shell命令,并支持多个参数和指定文件夹目录

想要在不同的平台上运行flutter doctor命令&#xff0c;就需要知道对应的平台是windows还是linux&#xff0c;如果是windows就需要调用cmd命令&#xff0c;如果是linux平台&#xff0c;就需要调用sh命令&#xff0c;所以可以通过cfg!实现不同平台的判断&#xff0c;然后调用不同…

【C++重新认知】:泛型编程(模板编程)

一、什么是泛型编程 当我们设计函数或者类时&#xff0c;有时候需要对应不同数据类型编写相同的代码&#xff0c;这样的话不仅有代码冗余&#xff0c;而且更加的加大程序员开发事件&#xff0c;降低开发效率&#xff0c;因此泛型编程就是解决此类情况----不同的数据类型可以重…

【大模型基础】什么是KV Cache?

哪里存在KV Cache&#xff1f; KV cache发生在多个token生成的步骤中&#xff0c;并且只发生在decoder中&#xff08;例如&#xff0c;decoder-only模型&#xff0c;如 GPT&#xff0c;或在encoder-decoder模型&#xff0c;如T5的decoder部分&#xff09;&#xff0c;BERT这样…