Python 如何求一个数的最大可能奇数因子

Python 如何求一个数的最大可能奇数因子,python,algorithm,cryptography,primes,factors,Python,Algorithm,Cryptography,Primes,Factors,我正在写一个破解小RSA密钥的脚本。我已经想到了一种方法,可以在我使用的方法中节省大量的时间。要做到这一点,我需要知道如何找到一个数的最大可能素数因子,具有一定的大小。例如: N = 9868690954602957859 N_MAX_FACTOR_BITSIZE = 64 然后,我通过这个算法运行N: p=楼面面积qrtn 如果p mod 2==0: p+=1 而p

我正在写一个破解小RSA密钥的脚本。我已经想到了一种方法,可以在我使用的方法中节省大量的时间。要做到这一点,我需要知道如何找到一个数的最大可能素数因子,具有一定的大小。例如:

N = 9868690954602957859
N_MAX_FACTOR_BITSIZE = 64
然后,我通过这个算法运行N:

p=楼面面积qrtn 如果p mod 2==0: p+=1 而p 为了缩短此算法所需的时间,我想在p 例如,一种算法,它以N和N_MAX_FACTOR_BITSIZE作为参数,并返回N的最大奇数因子,即N_MAX_FACTOR_BITSIZE长度

它返回的数字必须为N_MAX_FACTOR_BITSIZE位长


如果有任何帮助,我们将不胜感激。

请您重新表述您的问题,使其更加明确,您想要实现什么,您已经实现了什么,还有什么不起作用?否则它看起来像是为我做这个问题,最多有一个N的素因子大于sqrtN。但可能并没有。RSA密钥和数字属性无关。如果n可以被i和j整除,i和j甚至相对素数,那么i*j也必须除以n。如果两个除数都大于sqrtn,则它们的乘积大于n。你的前提立即导致了矛盾。对于随机整数,找到最大素因子的最简单方法是先找到最小的素因子。除去所有最小的因素后,剩下的就只有最大的因素了。然而,RSA模被选择为大小大致相同的两个素数的乘积。对于这些模,寻找最小和最大模的努力大致相同。最简单的方法可能是调用。它将为您完成这项工作,并且还支持大整数。另请参见。此算法可能需要进行一些调整。将进行尝试。此算法返回小于n的所有素数因子的列表。我需要一个算法,它能返回所有小于n的素数,并且其位大小为s,或者例如64位。@Legoroj看看这个算法,它会帮你的
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)