Python 作业答疑

1. 哥德巴赫猜想

问题描述:

2000以内的不小于4的正偶数都能够分解为两个素数之和(即验证歌德巴赫猜想对2000以内的正偶数成立)。

问题分析:

根据问题描述,为了验证歌德巴赫猜想对2000以内的正偶数都是成立的,要将整数分解为两部分,然后判断分解出的两个整数是否均为素数。若是,则满足题意,否则应重新进行分解和判断。

import math# 判断是否为素数
def fun(n):if n == 2:return 1  # n是2,返回1if n % 2 == 0:return 0  # n是偶数,不是素数,返回0i = 3while i <= math.sqrt(n):if n % i == 0:return 0  # n是奇数,不是素数,返回0i += 2return 1  # n是除2以外的素数,返回1# 验证哥德巴赫猜想
def guess(n):ok = 0  # 进入循环前先置标志位i = 2while i <= (n // 2):if fun(i):if fun(n - i):print("%d  %d\n" % (i, n - i))  # i和n-i都是素数,则打印ok = 1if i != 2:i += 1if ok == 1:break  # 已打印出所需要的输出结果,跳出循环i += 1if __name__ == "__main__":while True:  # 循环输入n = int(input())guess(n)  # 调用函数验证哥德巴赫猜想

2.可逆素数

问题描述:

请从小到大输出所有4位数的可逆素数。可逆素数是指一个素数将其各位数字的顺序倒过来构成的反序数也是素数。

问题分析:

题目的难点已经不在于判断一个数是否为素数,而在于如何求一个整数的反序数。

算法设计:

import math
# 判断素数
def fun(n):if n <= 1:return 0;  # n<1时显然不是素数,故返回0if n == 2:return 1  # n=2,是素数,返回1if n % 2 == 0:return 0  # n是偶数,不是素数,返回0for i in range(3, int(math.sqrt(n) + 1)):if n % i == 0:return 0  # n是奇数,不是素数,返回0i += 2return 1  # n是除2以外的素数,返回1if __name__ == "__main__":count = 0  # 计数器# 穷举法for a in range(1, 9 + 1):  # 千位for b in range(0, 9 + 1):# 百位for c in range(0, 9 + 1):  # 十位for d in range(1, 9 + 1):  # 个位if fun(a * 1000 + b * 100 + c * 10 + d):  # 判断4位整数是否为素数# 判断4位逆序的整数是否为素数if fun(a + b * 10 + c * 100 + d * 1000):if count % 10 == 0:  # 每10个数就换行print()print("%d   " % (a * 1000 + b * 100 + c * 10 + d), end="")count += 1print("\n4位可逆素数共有%d个" % count)

3.孪生素数

问题描述:

所谓孪生素数指的是间隔为2的两个相邻素数,因为它们之间的距离已经近得不能再近了,如同孪生兄弟一样,故将这一对素数称为孪生素数。

问题分析:

显然,最小的一对孪生素数是(1,3)。我们可以写出3~100以内的孪生素数,一共有8对,分别是(3,5),(5,7),(11,13),(17,19),(29,31),(41,43),(59,61)和(71,73)。随着数字的增大,孪生素数的分布也越来越稀疏,人工寻找孪生素数变得非常困难。

孪生素数是指若a为素数,且a+2也是素数,则素数a和a+2称为孪生素数。

算法设计:

import math
# 判断n是否为素数
def prime(n):k = math.sqrt(n) + 1i = 2while i <= k:if n % i == 0:return 0  # n能被j整除,不是素数,返回0i += 1return 1  # n是素数,返回1if __name__ == "__main__":count = 0  # 计数器print("3到1000之间的孪生素数:")for i in range(3, 1000):if prime(i) and prime(i + 2):print("(%-3d, %3d)  " % (i, i + 2), end="")count += 1if count % 5 == 0:  # 每5个数换一行print()print("\n1000以内的孪生素数共有%d对" % count)

二、Python 二班作业

1. 黑洞数

问题描述:

黑洞数又称陷阱数,是指任何一个数字不全相同的整数,在经过有限次“重排求差”操作后,总会得到某一个或一些数,这些数即为黑洞数。“重排求差”操作是将组成一个数的各位数字重排,将得到的最大数减去最小数。

例如,207的“重排求差”操作序列是:720-027=693,963-369=594,954-459=495,此时再进行“重排求差”操作不会发生改变。再用208计算一次,也是停止到495,所以495是三位黑洞数。

编程求三位数中的“黑洞数”。

问题分析:

根据“黑洞数”定义,对于任意一个数字不全相同的整数,最后结果总会掉入到一个黑洞圈或黑洞数里,最后结果一旦为黑洞数,无论再重复进行多少次的“重排求差”操作,结果都是一样的,因此可把结果相等作为判断“黑洞数”的依据。

本题关键:分解 3 位整数,重新排列后找到最大值和最小值。

算法设计:

# 原来的两数相减之差
pre_cha = 0
# 当前两数相减之差
cur_cha = 0
# 已经数字
num = 890
#
while True:# 分解数字lst = list(str(num))# 转换类型lst = [int(i) for i in lst]# 降序lst.sort()# 最小值mi = lst[0] * 100 + lst[1] * 10 + lst[2]# 最大值lst.sort(reverse=True)ma = lst[0] * 100 + lst[1] * 10 + lst[2]# 最大值减最小值之差cur_cha = ma - miif cur_cha == pre_cha:breaknum = cur_chapre_cha = cur_cha
print(pre_cha)

2. 多项式之和

问题描述:

计算下列多项式的值:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

问题分析:

每一项分式的分母都是对应项标记的阶乘。所以只要求出每一项的阶乘再将其倒数和加在一起即为所求多项式的结果。

算法设计:

n = int(input("请输入一个整数n: "))
s = 0  # s记录多项式的和
i = 1
while i <= n:  # i控制对应的项数t = 1  # t记录每一项分式的分母,每次循环之前给t赋初值j = 1while j <= i:t = t * j  # 每一项的阶乘j += 1s = s + 1 / ti += 1
print("%f" % s)

3.列出真分数序列

问题描述:

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

问题分析:

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

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

算法设计:

print("分母为40,分子小于40的最简分数有:")
n = 0  # 计数器,记录最简分数的个数
for i in range(1, 40):  # 穷举40以内的全部分子num1 = 40  # 分母num2 = i  # 分子# 采用辗转相除法求出分子与分母的最大公约数while num2 != 0:temp = num1 % num2num1 = num2num2 = tempif num1 == 1:  # 若最大公约数为1,则为最简真分数n += 1print("%2d/40 " % i, end=" ")if n % 8 == 0:  # 每8个一行print()

三、Python 三班作业

1. 三色球

问题描述:

一个口袋中放有12个球,已知其中3个是红的,3个是白的,6个是黑的,现从中任取8个,问共有多少种可能的颜色搭配?

问题分析:

根据问题描述可设任取的8个球中红球为m个,白球为n个,则黑球为8-m-n个。又已知12个球中有3个红球、3个白球、6个黑球,因此,m的取值范围为[0,3]n的取值范围为[0,3],黑球的个数小于等于6,即8-m-n≤6

算法设计:

由上述分析可知,红、白、黑三种颜色球的个数的取值范围已经确定了,现在要求的是所有可能的颜色搭配情况,因此可以使用循环结构检测m、n范围内的所有可能取值,再代入8-m-n≤6中进行验证,能够满足条件8-m-n≤6的那些mn8-m-n的组合即为问题的解。

# 从12个球中任取8个,红球m个,白球n个,黑球8-m-n个
# m的取值范围为[0,3],因此n的取值范围为[0,3],黑球的个数小于等于6,即8-m-n≤6
print("\t 红球 \t 白球 \t 黑球")
print("........................")
num = 0
for m in range(0, 4):for n in range(0, 4):if 8-m-n <= 6:num += 1print("%2d:  %d \t\t %d \t\t %d" %(num, m, n, 8-m-n))

2. 求自然数

问题描述:

四个连续的3位自然数的和是一个在400440之间的三位数,并且能被9整除,这四个自然数分别是多少?

问题分析:

假设第 1 个自然数为 n,因存在连续关系,则后 3 个自然数为 n+1,n+2,n+3。且 n+(n+1)+(n+2)+(n+3) 大于等于 400,小于等于 440。可分析得到一个结论,任一数字都不可以大于 400

算法设计:

for n in range(100,110):if 4*n+6>=400 and 4*n+6<=440 and (4*n+6) % 9==0:print(n)

3. 爱因斯坦的数学题

问题描述:

爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最后剩一阶,若每步跨3阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶,则最后剩5阶。只有每次跨7阶,最后才正好一阶不剩。请问在11000内,有多少个数能满足?

问题分析:

此问题的本质就是求解一个同时能满足如下条件的数字。

  • 2整除余 1
  • 3整除余数 2
  • 5 整除余数为 4
  • 6 整除余数为 5
  • 7 整除余数为 0

算法设计:

sum = 0
for i in range(7, 1000 + 1,2):# 阶梯数所满足的条件if (i % 7 == 0) and (i % 6 == 5) and (i % 5 == 4) and (i % 3 == 2):sum += 1  # sum记录1~n之间满足条件的阶梯个数print("%d" % i)
print("在1-%d之间,有%d个数可以满足爱因斯坦对阶梯的要求。" % (1000, sum))

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 11 适配——整理总结篇

背景 > 经过检测&#xff0c;我们识别到您的应用&#xff0c;目前未适配安卓11&#xff08;API30&#xff09;&#xff0c;请您关注适配截止时间&#xff0c;尽快开展适配工作&#xff0c;避免影响应用正常发布和经营。 > targetSdkVersion30 升级适配工作参考文档&am…

SRC挖掘漏洞XSS

Markdown是一种轻量级标记语言&#xff0c;创始人为约翰格鲁伯&#xff08;John Gruber&#xff09;。它允许人们使用易读易写的纯文本格式编写文档&#xff0c;然后转换成有效的 XHTML&#xff08;或者HTML&#xff09;文档。这种语言吸收了很多在电子邮件中已有的纯文本标记的…

Hadoop学习笔记(HDP)-Part.20 安装Flume

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

鸿蒙开发ArkTS语言—状态管理概述

概述 我们构建的页面多为静态界面。如果希望构建一个动态的、有交互的界面&#xff0c;就需要引入“状态”的概念。 图1 效果图 上面的示例中&#xff0c;用户与应用程序的交互触发了文本状态变更&#xff0c;状态变更引起了UI渲染&#xff0c;UI从“Hello World”变更为“Hel…

方法-TensorBoard如何在PC端远程可视化服务器的训练结果

本专栏为深度学习的一些技巧,方法和实验测试,偏向于实际应用,后续不断更新,感兴趣童鞋可关,方便后续推送 简介 TensorBoard 是 TensorFlow 的可视化工具&#xff0c;可以帮助用户实时监控深度神经网络的训练过程,基于PyTorch的训练过程也可以可视化。假设我在服务器上进行模型…

SpringSecurity6 | 修改默认用户

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: Java从入门到精通 ✨特色专栏: MySQL学习 🥭本文内容:SpringSecurity6 | 修改默认用户 📚个人知识库 :知识库,欢迎大家访问 学习参考…

【前端架构】清洁前端架构

探索前端架构&#xff1a;概述与干净的前端架构相关的一些原则&#xff08;SOLID、KISS、DRY、DDD等&#xff09;。 在我之前的一篇帖子中&#xff0c;我谈到了Signals和仍然缺少的内容[1]。现在&#xff0c;我想谈谈一个更通用的主题&#xff0c;即Clean Frontend Architectu…

用C语言的循环嵌套打印菱形

这是用循环弄出来的&#xff0c;看的时候可以列一个表&#xff0c;将空格&#xff0c;要打印的*数&#xff0c;行数对应出来&#xff0c;因为里面涉及到一些数学公式&#xff0c;写出来的话方便观察&#xff01; #define _CRT_SECURE_NO_WARNINGS 1//C语言中用scanf可能会警告&…

软件开发自动化到智能文档检索:大语言模型驱动的开源项目盘点 | 开源专题 No.46

shroominic/codeinterpreter-api Stars: 2.4k License: MIT 这是一个 ChatGPT 代码解释器的开源实现项目&#xff0c;使用了 LangChain 和 CodeBoxes 进行后端沙盒式 Python 代码执行。该项目具有以下特性和优势&#xff1a; 数据集分析、股票图表绘制、图像处理等功能支持网…

Vue2脚手架搭建+项目基础依赖安装

文章目录 1. 安装 node.js2. 安装 vue-cli 脚手架3. 创建 vue2 项目4. 安装基础依赖 1. 安装 node.js 可以参考这篇文章 https://blog.csdn.net/weixin_43721000/article/details/134284418 2. 安装 vue-cli 脚手架 安装 vue-clinpm install -g vue/cli查看是否安装成功vue -…

最优化理论复习--对偶理论及灵敏度分析(一)

文章目录 上一篇对偶表示对偶问题的基本性质对偶问题的经济学解释&#xff1a;影子价格下一篇 上一篇 最优化理论复习–单纯形方法 对偶表示 一般情况&#xff1a; 对偶问题与原问题的字母表示: 对偶表示运用表格&#xff1a; m i n ⇒ m a x min \Rightarrow max min⇒m…

C++ vector基本操作

目录 一、介绍 二、定义 三、迭代器 四、容量操作 1、size 2、capacity 3、empty 4、resize 5、reserve 总结&#xff08;扩容机制&#xff09; 五、增删查改 1、push_back & pop_back 2、find 3、insert 4、erase 5、swap 6、operator[] 一、介绍 vector…