def f(num):
return num
number = f(13195)
list = [ x for x in range(number) if ((x!= 0 and x!=1) and number%x ==0)] #x (the multiplication factor) should not be 0 or 1
max = max(list)
for num in range(1,max) :
if all(num%i!=0 for i in range(2,num)):
if num in list:
print num
您好,此代码用于查找数字的最大素数。 我尝试过使用f(13195)并且我找到了正确的数字,但是我在范围内得到了太多项目的错误,还有其他方法可以解决这个问题吗?
但是当我输入600851475143时,它表示范围太多了,但是,这是否意味着我不应该使用范围?提前谢谢!
答案 0 :(得分:2)
您可以改为使用xrange(number)
。
然而,对于大数字来说,循环将花费很长时间
或者使用Python3,其中range
的行为类似于xrange
答案 1 :(得分:0)
import math
def f(num):
return num
number = f(600851475143)
list = [ x for x in xrange(int(math.sqrt(number))) if ((x!= 0 and x!=1) and number%x ==0)]
max = max(list)
for num in xrange(1,max) :
if all(num%i!=0 for i in xrange(2,num)):
if num in list: # if sth is true it runs...
print num
我想通了,我们需要将范围更改为数字的平方根,我更改了算法,而不是尝试在python中找到比xrange更大的范围
请在此处查找详细说明:如果您有兴趣:)“第二回复” Why do we check up to the square root of a prime number to determine if it is prime?