Just for the record – custom algorithm for searching greatest prime divisor of a number, O(n) worst-case (O(sqrt(n)) taken by prime detection):
def prime(num, get_number=False):
for divisor in range(2, int(math.sqrt(num)) + 1):
if num % divisor == 0:
return False
return num if get_number else True
def hydra_gpd(num, get_number=None):
sequence = range(2, int(math.sqrt(num)) + 1)
gpd = 1
for divisor in sequence:
divided = int(num / divisor)
if num % divisor == 0:
if prime(divisor) and divisor > gpd:
gpd = divisor
if prime(divided) and divided > gpd:
gpd = divided
recursive_gpd = hydra_gpd(divided)
if recursive_gpd > gpd:
gpd = recursive_gpd
return gpd
return gpd
Nothing too special, just to keep it around.