2013-04-28 68 views
0

一直试图让蟒蛇返回一个数字的最高首要因素,并敲打我明明榆木脑袋的11天后我已经准备好寻求帮助。任何想法为什么这不会返回最高的主要因素?它需要这么长时间我手动退出程序,或抱怨说“蟒蛇诠释大转换为C长”。任何帮助或建议将非常感谢!谢谢!主要因素蟒噩梦

def primeCheck(value): 
    for x in range(2, int(value/2) + 1): 
     if value % x < 0.1: 
      return False 
    return True 

val = int(raw_input('What number would you like the highest prime factor of?')) 
pc = 2 
for x in xrange(pc, int((val/pc) + 1)): 
    if primeCheck(x) and val % x < 0.1: 
     val = val/x 
     pc = x 
print pc 
+0

,它需要一段时间大量被拖欠的事实,这个事实你算法设计需要O(n^2)次。你有两个嵌套循环基本上搜索范围(1..n)。随着更大的输入值,这需要越来越多的时间。 – likeitlikeit 2013-04-28 23:26:48

回答

0

你的素性测试可能会好得多。根据您需要测试的数量有多大,您可以保留一大堆。这是一个nice collection of primes。更好的方式是像米勒 - 拉宾适当的测试,看看my code该作品到非常大的限制确定性版本。

你也可以看看真正的integer factorization算法。

0

怪我只是读一个可爱解决这个今天 - 在这里你去:

Tryptych's answer

def prime_factors(n): 
    "Returns all the prime factors of a positive integer" 
    factors = [] 
    d = 2 
    while (n > 1): 
     while (n%d==0): 
      factors.append(d) 
      n /= d 
     d = d + 1 

    return factors 


pfs = prime_factors(1000) 
largest_prime_factor = pfs[-1] # The largest (last) element in the prime factor array