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.