主要因素python噩梦

时间:2013-04-28 22:57:12

标签: python numbers generator

我一直试图让python找到一个数字中最高的素数因子,11天后我的明显愚蠢的头撞了,我准备寻求帮助了。

知道为什么这会赢回最高的素数因素吗?我需要花费很长时间才能手动退出程序,或者抱怨python int to large to convert to C long

非常感谢任何帮助或建议!谢谢!

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

4 个答案:

答案 0 :(得分:1)

奇怪,因为我今天正在阅读一个可爱的解决方案 - 你走了:

<强> 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

答案 1 :(得分:0)

你的素性测试可能会好得多。根据您需要测试的数量的大小,您可以只维护它们中的大量数据。这是nice collection of primes。更好的是像Miller-Rabin这样的正确测试,请参阅my code获得一个确定性版本,该版本可以达到很大的限制。

您还可以查看真实的integer factorization算法。

答案 2 :(得分:0)

这是我制作的。它找到从2到大数的素数。然后它将素数写入文本文件。

import math
length = 1
percentage = 1
startNumber = input('What number would you like to start counting from? (This has to be 2 to work)')
endNumber = input('What number would you like to finish counting to?')
file = open('Primes.txt','r+')
print(2)
for num in range(int(startNumber) + 1,int(endNumber) + 1,2):
    if all(num%i!=0 for i in range(2,int(math.sqrt(num))+1)):
        print(num)
        file.write(str(num) + '\n')
        length += 1
print('There are ' + str(length) + ' primes between ' + str(startNumber) + ' and ' + str(endNumber) + '.')
file.close()

希望这会有所帮助: - )

答案 3 :(得分:0)

首先,我定义一个函数,如果数字是素数,则该函数返回True。

def prime(i):
""" This function finds whether a number is prime or not?"""
val=False
for n in range(2,i):
    if i%n==0:
            break;
else:
    val=True
return val

然后,我使用此函数查找输入数字的素数。

for x in range(2,num):
if num%x==0: 
    if prime(x)==True:
        print ("prime factor of {} is {}".format(num,x))

num是输入数字。