هر عددی مانند n حداکثر بر یک عدد اول بزرگتر از √n بخشپذیر است. برای تجزیه عدد n میتوان عدد اول و توان آن را به ازای تمام اعداد اول کوچکتر از √n به دست آورد. سپس اگر ضرب این اعداد برابر n نشد آنگاه n تقسیم بر ضرب این اعداد برابر یک عدد اول است که خود باید در تجزیه بیاید.
def factorization(n): ans = [] p = 2 while p * p <= n: if n % p == 0: cnt = 0 while n % p == 0: n /= p cnt += 1 ans.append((p, cnt)) p += 1 if n > 1: ans.append((n, 1)) return ans