from functools import lru_cache
import math
@lru_cache(None) # lru asal hesaplamada iyidir
def is_prime(n: int) -> bool:
if n < 2:
return False
if n in (2, 3):
return True
if n % 2 == 0 or n % 3 == 0:
return False
limit = int(math.sqrt(n))
for i in range(5, limit + 1, 2):
if n % i == 0:
return False
return True
def prm_factor(c: int) -> int:
if c < 2:
raise Exception("c>=2 aksiyom")
start = int(math.sqrt(c))
if start % 2 == 0:
start -= 1
for g in range(start, 1, -2):
if c % g == 0 and is_prime(g):
return g # ilk match gg
return c if is_prime(c) else None # sayinin kendisi asal olabilir
print(prm_factor(600851475143))