鱼C论坛

 找回密码
 立即注册
查看: 2098|回复: 4

[已解决]希望各位大佬能帮我解决这两道题

[复制链接]
发表于 2020-10-3 11:15:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是我老师给我布置的一个拔高题 但我搞不明白怎么写 希望各位大神能用Python写出来 教我一下
1,编写一个程序,找出1-30内的所有素数,并对这些素数进行从大到小的排序,然后输出排序后的素数,最后返回素数的个数。
(素数说明:指在大于1的自然数中,除了1和该数自身之外,无法被其他自然数整除的数)


2, 编写一个程序解决以下这个数学问题:小明过年时收到了若干压岁钱,当天花掉了一半,还不过瘾,又多花了一块钱。第二天早上又将剩下的钱花掉一半,然后又多花了一块钱。 以后每一天都花了前一天剩下钱的一半多一块。到第10天早上再花时,小明发现只剩下最后一块钱了。求小明共收到了多少压岁钱?
最佳答案
2020-10-3 12:01:22
    【第1题】
#-*-coding:gbk-*-
import math
d = []
for x in range(1 , 31):
    if x > 1:
        for k in range(2 , int(math . sqrt(x)) + 1):
            if k < x and not (x % k) :
                break
        else :
            d . insert(0 , x)
print('1 - 30 之间一共有 ' , len(d) , '个素数')
print(d[0] , end = '')
for k in range(1 , len(d)):
    print('        ' , d[k] , end = '')
print()
【第2题】:
s = 1
for k in range(9):
    s = (s + 1) * 2
    print(s)
    答案是,小明一共收到了 1534 元 "压岁钱"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-3 12:01:22 | 显示全部楼层    本楼为最佳答案   
    【第1题】
#-*-coding:gbk-*-
import math
d = []
for x in range(1 , 31):
    if x > 1:
        for k in range(2 , int(math . sqrt(x)) + 1):
            if k < x and not (x % k) :
                break
        else :
            d . insert(0 , x)
print('1 - 30 之间一共有 ' , len(d) , '个素数')
print(d[0] , end = '')
for k in range(1 , len(d)):
    print('        ' , d[k] , end = '')
print()
【第2题】:
s = 1
for k in range(9):
    s = (s + 1) * 2
    print(s)
    答案是,小明一共收到了 1534 元 "压岁钱"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-10-3 21:25:14 | 显示全部楼层
学艺不精,不是很会用库,所以琢磨了一个不用库的办法,提供一个思路。所以比较啰嗦,没有效率,搞了4个列表。
num1 = []
num2 = []
num3 = []
num4 = []

# 产生一个列表num1,包含1-30
for k in range(1,31):
    num1.append(k)
# 复制一个列表num2,用来最后剔除不是素数都数
num2 = num1[:]
# 复制一个列表num3,用来进行判断一个数是否素数
num3 = num1[:]

# 在num3中,从第一个大于1的数开始循环
for m in num3:
    if m > 1:
        # 第二个循环,循环目标是num3[:m],意思是从1开始到m自身(例如:m=5,num3[:5]
        # 就是[1,2,3,4,5]
        for n in num3[:m]:
            # 该print用于验证m、n的对应关系
            # print('m=',m,'n=',n)

            # m and n 求余,是否=0,=0是整除
            if m % n == 0:
                # 本句用于标记,方便查看,可以删除
                print(m,'这个数可以被',n,'整除')
                # 如果n不是m自身一样的数
                if n != m:
                    # 如果n不是等于1,此2句if判断是否素数
                    if n != 1:
                        # 用于标记,方便查看,可以删除
                        print(m,'不是素数')
                        # 将所有不是素数的数方在num4这个列表
                        num4.append(m)
# 列表num4包含了所有非素数的数,但是因为是循环,所以有很多重复项                        
# print(num4)

# 通过把列表num4中的数全部循环在列表num2中剔除的方法,把num2中的非素数全部剔除
for k in num4:
    if k in num2:
        num2.remove(k)

# 根据素数定义,要大于1,而num2中原本包含1,需要剔除
num2.remove(1)

# 输出最后答案
print(num2)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-6 13:11:36 | 显示全部楼层
jackz007 发表于 2020-10-3 12:01
【第1题】

【第2题】:

请问第二题你能不能简单描述一下那段代码的意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-10-6 13:13:22 | 显示全部楼层
yaotaoism 发表于 2020-10-3 21:25
学艺不精,不是很会用库,所以琢磨了一个不用库的办法,提供一个思路。所以比较啰嗦,没有效率,搞了4个列 ...

谢谢你 你这个虽然复杂 但很基础
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-11 00:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表