I'm writing a script to crack small RSA keys. I've thought of a way to save massive amounts of time in the methods I'm using. To do this, I need to know how to find the largest possible prime factor of a number, of a certain size. For example:
N = 9868690954602957859
N_MAX_FACTOR_BITSIZE = 64
Then, I run N through this algorithm:
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
This algorithm works on the principle that there are only two prime numbers above floor(sqrt(N)) that will divide N evenly. Seeing as both numbers will be prime, the algorithm only checks odd numbers.
To shorten the amount of time this algorithm takes, I would like to swap the N in while p < N with the largest odd 64 bit number that could multiply into N. 
EG an algorithim that takes N and N_MAX_FACTOR_BITSIZE as arguments and returns the largest odd factor of N that is N_MAX_FACTOR_BITSIZE long.
The number it returns must be N_MAX_FACTOR_BITSIZE bits long.
Any help would be appreciated.
 
    