如何找到数字的最大可能奇数

时间:2019-06-13 14:53:48

标签: python algorithm cryptography primes factors

对于我正在编写的程序,我想到了一种节省大量时间的方法。为此,我需要知道如何找到一定数量的最大可能质数。例如:

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

例如一个以NN_MAX_FACTOR_BITSIZE作为参数并返回N长的最大N_MAX_FACTOR_BITSIZE奇数因子的算法。

返回的数字必须为N_MAX_FACTOR_BITSIZE位。

任何帮助将不胜感激。

2 个答案:

答案 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)