def pollard_rho(num, c=1): if rabin.isprime_MR(num): return None x = random.randint(1, num-1) y = f(x,c,num) d = 1 while d == 1: d = gcd(abs(x-y), num) if d == num: c = c+1 return pollard_rho(num,c) x = f(x,c,num) y = f(f(y,c,num),c,num) return d
def prime_factors(num): factors = [x for x in factor(num) if rabin.isprime_MR(x)] d = defaultdict(int) for fact in factors: d[fact] += 1 return d