# 素因数分解 '26/02/14改訂 # def PF(n)内のxを素数に限定しないと大量処理では時間がかかる def eratos(n): primes = [True] * (n+1) primes[0], primes[1] = False, False for i in range(2, int(n**0.5)+1): if primes[i]: for j in range(i**2, n+1, i): primes[j] = False ret = [num for num, is_prime in enumerate(primes) if is_prime] return ret prime = eratos(10 ** 4 +1) def PF(n): y = n p = [] for x in prime: if x * x > n: break cnt = 0 while y % x == 0: y //= x cnt += 1 if cnt != 0: p.append((x,cnt)) if y != 1: p.append((y,1)) return p