对于我正在编写的程序,我想到了一种节省大量时间的方法。为此,我需要知道如何找到一定数量的最大可能质数。例如:
N = 9868690954602957859
N_MAX_FACTOR_BITSIZE = 64
然后,我通过此算法运行N
:
p = floor(sqrt(n))
if p mod 2 == 0:
p += 1
while p < N: # Referenced above
if p mod n == 0:
return p
p += 2
此算法的工作原理是floor(sqrt(N))
上方只有两个素数,它们将N
均分。由于两个数字都是质数,因此该算法仅检查奇数。
为缩短此算法花费的时间,我想用最大的奇数64位数字交换while p < N
中的N,该数字可以乘以N
。
例如一个以N
和N_MAX_FACTOR_BITSIZE
作为参数并返回N
长的最大N_MAX_FACTOR_BITSIZE
奇数因子的算法。
返回的数字必须为N_MAX_FACTOR_BITSIZE
位。
任何帮助将不胜感激。
答案 0 :(得分:0)
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
n = 9868690954602957859
primes =prime_factors(n)[-1]
print(primes)
答案 1 :(得分:-1)
此函数返回最大数量的n
位,并且它返回的数字始终为奇数。 (至少1百万个比特)
def largest_bitsize(n):
return ~(-1 << n)