我一直试图让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
答案 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是输入数字。