可爱的菲菲酱 发表于 2020-6-10 08:05:45

求最大的质数

文件夹中存储了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
   for j in int(c):
       if c%j==0:
         if c<a:
               break
            else:
                p=c
print(p)

xiaosi4081 发表于 2020-6-10 08:08:18

冒泡试下哈

Twilight6 发表于 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 错误,我们切割后的列表 是 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)
   for j in range(2,c):
       if c%j==0:
            break
   else:
      prime.append(c)
print(max(prime))


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

然后你只有打印 一个 p ,而且大小判断条件那里出错了,反而达不到效果了~,你应该加入个列表,然后使用 max 方法直接求出最大质数

sunrise085 发表于 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)#c应该从d中取值
   for j in range(2,c):#求质数,应该从2开始,应该用range
       if c%j==0:
         if c<int(d)-1:#这里应该是数值减1而不是下标减1
               break
            else:
                p=c
    if max_data>p:#找最大的值
      max_data=p
print(max_data)

赚小钱 发表于 2020-6-10 10:34:55

上面的方法好奇怪啊。。排个序,然后,从后向前遍历,找到第一个质数,不就行了

可爱的菲菲酱 发表于 2020-6-10 11:09:09

xiaosi4081 发表于 2020-6-10 08:08
冒泡试下哈

冒泡是什么?

Twilight6 发表于 2020-6-10 13:29:49

可爱的菲菲酱 发表于 2020-6-10 11:09
冒泡是什么?

冒泡排序,依次比较两个相邻的元素,如果顺序错误那么就交换位置

Twilight6 发表于 2020-6-10 13:30:33

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

{:10_297:}用max 也 不奇怪吧....

赚小钱 发表于 2020-6-10 15:49:39

Twilight6 发表于 2020-6-10 13:30
用max 也 不奇怪吧....

多做的大量的无用计算,完全是浪费计算资源。。。

Twilight6 发表于 2020-6-10 16:28:18

赚小钱 发表于 2020-6-10 15:49
多做的大量的无用计算,完全是浪费计算资源。。。

哈哈 那确实蛤,那这样节省不少了吧:
f=open(r"C:/y.txt")
a=f.read()
f.close()
d=
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


wp231957 发表于 2020-6-10 16:53:55

Twilight6 发表于 2020-6-10 16:28
哈哈 那确实蛤,那这样节省不少了吧:

②楼以下全部答错
看标题啊,最大质数,目前计算机界和数学界都不会有答案的

Twilight6 发表于 2020-6-10 17:03:37

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

哈哈你也看清楚是 文件中 20个整数其中最大的质数

Future博弈 发表于 2020-6-10 17:13:20

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

大佬你无处不在{:10_298:}

Twilight6 发表于 2020-6-10 17:19:43

Future博弈 发表于 2020-6-10 17:13
大佬你无处不在

{:10_266:}
页: [1]
查看完整版本: 求最大的质数