def spread(N): if N == 1: return 0 else: # most waiters = sum(greatest k such that p**k <= N over p a prime less than or equal to N) # = pi(n) + pi(n**1/2) + pi(n**1/3) + pi(n**1/4) + .. # by counting # fewest waiters = pi(n) answer = 1 k = 2 x = kth_root(N, k) while x >= 2: answer += primes.count(x) k += 1 x = kth_root(N, k) return answer
def spread(N): if N == 1: return 0 else: # most waiters = sum(greatest k such that p**k <= N over p a prime less than or equal to N) # = pi(n) + pi(n**1/2) + pi(n**1/3) + pi(n**1/4) + .. # by counting # fewest waiters = pi(n) answer = 1 k = 2 x = kth_root(N,k) while x >= 2: answer += primes.count(x) k += 1 x = kth_root(N,k) return answer
def test_kth_root(): assert kth_root(125, 3) == 5 assert kth_root(125, 2) == 11 assert kth_root(125, 1) == 125