鱼C论坛

 找回密码
 立即注册
查看: 2132|回复: 13

求最大的质数

[复制链接]
发表于 2020-6-10 08:05:45 | 显示全部楼层 |阅读模式

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

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

x
文件夹中存储了20个整数,要求输出20跟整数当中的最大的质数
我怎么改都改不对,求帮忙,哪里需要改进的
f=open(r"C:/y.txt", mode='r+')
a=f.read()
f.close()
d=a.split()
for i in range(1,len(d)+1):
    c=a[i]
   for j in int(c):
       if c%j==0:
           if c<a[i-1]:
               break
            else:
                p=c
print(p)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-10 08:08:18 | 显示全部楼层
冒泡试下哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 08:13:47 | 显示全部楼层
本帖最后由 Twilight6 于 2020-6-10 08:53 编辑

质数是除了本身和1以外没有能整除它的数,所以你遍历用 range 循环整除 2~你哪个数即可,因为range是包含左边不包含右边的,所以 遍历除法范围是 2~ 被除数-1


你如果单纯的读取文件,可以不用带 + 号,+号是读写模式了~ open 默认是以 r 只读模式 所以可以直接 open 即可
f=open(r"C:/y.txt")
第二个for 错误,整数不能进行迭代
for j in int(c)

还有
c = a[i]
错误,我们切割后的列表 是 d而不是 a

完整代码:
f=open(r"C:/y.txt")
a=f.read()
f.close()
d=a.split()
prime = []

for i in range(1,len(d)):
   c=int(d[i])
   for j in range(2,c):
       if c%j==0:
            break
   else:
        prime.append(c)
print(max(prime))

你的第二个 for 循环里的 if 条件是正确的 第二个if 条件实际上没有意义了,因为你只需要整除一次说明这个数就不是质数了

然后你只有打印 一个 p ,而且大小判断条件那里出错了,反而达不到效果了~,你应该加入个列表,然后使用 max 方法直接求出最大质数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-6-10 08:29:49 | 显示全部楼层
多处错误,帮你修改并注释了。
f=open(r"C:/y.txt", mode='r+')
a=f.read()
f.close()
d=a.split()#切片后,还是字符串,d的每个对象对应一个数字
max_data=0
p=0
for i in range(len(d)):#应该从第一个开始遍历,这里下标弄错了
    c=int(d[i])#c应该从d中取值
   for j in range(2,c):#求质数,应该从2开始,应该用range
       if c%j==0:
           if c<int(d[i])-1:#这里应该是数值减1而不是下标减1
               break
            else:
                p=c
    if max_data>p:#找最大的值
        max_data=p
print(max_data)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 10:34:55 | 显示全部楼层
上面的方法好奇怪啊。。排个序,然后,从后向前遍历,找到第一个质数,不就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-10 11:09:09 | 显示全部楼层

冒泡是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 13:29:49 | 显示全部楼层

冒泡排序,依次比较两个相邻的元素,如果顺序错误那么就交换位置
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 13:30:33 | 显示全部楼层
赚小钱 发表于 2020-6-10 10:34
上面的方法好奇怪啊。。排个序,然后,从后向前遍历,找到第一个质数,不就行了

用max 也 不奇怪吧....
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 15:49:39 | 显示全部楼层
Twilight6 发表于 2020-6-10 13:30
用max 也 不奇怪吧....

多做的大量的无用计算,完全是浪费计算资源。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 16:28:18 | 显示全部楼层
赚小钱 发表于 2020-6-10 15:49
多做的大量的无用计算,完全是浪费计算资源。。。


哈哈 那确实蛤,那这样节省不少了吧:
f=open(r"C:/y.txt")
a=f.read()
f.close()
d=[int(i) for i in a.split()]
d.sort(reverse=True)

for i in d:
   c = int(i**0.5)
   for j in range(2,c+1):
       if i%j==0:
            break
   else:
       print(i)
       break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 16:53:55 From FishC Mobile | 显示全部楼层
Twilight6 发表于 2020-6-10 16:28
哈哈 那确实蛤,那这样节省不少了吧:

②楼以下全部答错
看标题啊,最大质数,目前计算机界和数学界都不会有答案的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 17:03:37 | 显示全部楼层
wp231957 发表于 2020-6-10 16:53
②楼以下全部答错
看标题啊,最大质数,目前计算机界和数学界都不会有答案的

哈哈  你也看清楚是 文件中 20个整数  其中最大的质数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 17:13:20 | 显示全部楼层
Twilight6 发表于 2020-6-10 08:13
你如果单纯的读取文件,可以不用带 + 号,+号是读写模式了~ open 默认是以 r 只读模式 所以可以直接 op ...

大佬你无处不在
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 17:19:43 | 显示全部楼层

  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 07:55

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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