py大神 发表于 2017-12-9 00:27:59

欧拉计划第三题

这是题目:
最大质因数
13195的所有质因数为5、7、13和29。

600851475143最大的质因数是多少?
a = 600851475143
b = 0
d = []
f = []
h = 0
for i in range(1,a):
    if a%i == 0:
      d.append(i)#把a的因数添加到d中
#接下来判断d中的元素是不是质数
for e in d:
    for g in range(1,e+1):
      if type(e/g) == int:
            h = e#当h的值改变则认为d的元素e不是质数
      else:
            pass
      if h == 0:#当h的值没有改变则认为d的元素是a的质因数
            f.append(e)
print(max(f))
上面是我写的程序,当a的值小的时候会出来结果,但是如果a的值太大了就会出不来结果,是不是一直在运算?
怎么改更好?

py大神 发表于 2017-12-9 00:41:36

初学者,小白,写的代码有点差,不要嘲笑我{:10_281:}{:10_281:}{:10_281:}{:10_281:}

py大神 发表于 2017-12-9 00:41:43

初学者,小白,写的代码有点差,不要嘲笑我{:10_281:}{:10_281:}{:10_281:}{:10_281:}

BngThea 发表于 2017-12-9 09:30:47

本帖最后由 BngThea 于 2017-12-9 09:31 编辑

根据你的思路,对于每一个e,你都应该先将h设为零,而且g应该从2开始判断到e-1

py大神 发表于 2017-12-9 20:53:15

BngThea 发表于 2017-12-9 09:30
根据你的思路,对于每一个e,你都应该先将h设为零,而且g应该从2开始判断到e-1

a = 98765456231
b = 0
d = []
f = []
h = 0
for i in range(1,a):
    if a%i == 0:
      d.append(i)#把a的因数添加到d中
#加下来判断d中的元素是不是质数
for e in d:
    h = 0
    for g in range(2,e):
      if type(e/g) == int:
            h = e#当h的值改变则认为d的元素e不是质数
      else:
            pass
      if h == 0:
            f.append(e)
print(max(f))
      
   

py大神 发表于 2017-12-9 20:53:48

BngThea 发表于 2017-12-9 09:30
根据你的思路,对于每一个e,你都应该先将h设为零,而且g应该从2开始判断到e-1

还是运行不出来.....

BngThea 发表于 2017-12-9 21:36:22

py大神 发表于 2017-12-9 20:53
还是运行不出来.....

逻辑是对了,但是算法太糟糕,需要的计算时间太长

py大神 发表于 2017-12-9 21:47:13

BngThea 发表于 2017-12-9 21:36
逻辑是对了,但是算法太糟糕,需要的计算时间太长

我也感觉是这样........

BngThea 发表于 2017-12-9 21:55:00

py大神 发表于 2017-12-9 21:47
我也感觉是这样........

对了,e/g肯定是float
你可以试试type(4/2)
页: [1]
查看完整版本: 欧拉计划第三题