def p027(N=10**3): lim = 10 * N table = set(numty.sieve(lim)) primes = numty.sieve(2 * N + 1) best = 0 best_ab = (0, 0) for b in primes: if b > N: break for c in primes: a = c - b - 1 if a > N: break count = 2 while True: cand = count**2 + a * count + b if cand < 0: break if cand < lim and cand not in table: break if cand >= lim and not numty.isprime(cand): break count += 1 if count > best: best_ab = (a, b) best = count return best_ab[0] * best_ab[1]
def p027(N = 10**3): lim = 10*N table = set(numty.sieve(lim)) primes = numty.sieve(2*N+1) best = 0 best_ab = (0,0) for b in primes: if b > N: break for c in primes: a = c - b - 1 if a > N: break count = 2 while True: cand = count**2+a*count+b if cand < 0: break if cand < lim and cand not in table: break if cand >= lim and not numty.isprime(cand): break count += 1 if count > best: best_ab = (a,b) best = count return best_ab[0]*best_ab[1]
def p050(N=10 ** 6, lim=4000): primes = numty.sieve(lim) primeset = set(primes) bestprime = 0 bestlen = 0 bestbase = 0 i = 0 while True: if i + bestlen > len(primes): logger.error("Limit was too low!") return cand = sum(primes[i : i + bestlen]) if cand >= N: break j = i + bestlen while cand < N: if j >= len(primes): logger.error("Limit was too low!") return cand += primes[j] j += 1 while j > i + bestlen: if numty.isprime(cand): bestprime = cand bestlen = j - i bestbase = primes[i] break cand -= primes[j - 1] j -= 1 i += 1 logger.debug((bestlen, primes[bestbase : bestbase + bestlen])) return bestprime
def p050(N=10**6, lim=4000): primes = numty.sieve(lim) primeset = set(primes) bestprime = 0 bestlen = 0 bestbase = 0 i = 0 while True: if i + bestlen > len(primes): logger.error('Limit was too low!') return cand = sum(primes[i:i + bestlen]) if cand >= N: break j = i + bestlen while cand < N: if j >= len(primes): logger.error('Limit was too low!') return cand += primes[j] j += 1 while j > i + bestlen: if numty.isprime(cand): bestprime = cand bestlen = j - i bestbase = primes[i] break cand -= primes[j - 1] j -= 1 i += 1 logger.debug((bestlen, primes[bestbase:bestbase + bestlen])) return bestprime
def p087(N=5*10**7): primes = numty.sieve(int(math.sqrt(N))) squares = [p**2 for p in primes if p**2 < N] cubes = [p**3 for p in primes if p**3 < N] fourthpows = [p**4 for p in primes if p**4 < N] goodnums = set(a+b+c for a in squares for b in cubes for c in fourthpows if a+b+c < N) return len(goodnums)
def p087(N=5 * 10**7): primes = numty.sieve(int(math.sqrt(N))) squares = [p**2 for p in primes if p**2 < N] cubes = [p**3 for p in primes if p**3 < N] fourthpows = [p**4 for p in primes if p**4 < N] goodnums = set(a + b + c for a in squares for b in cubes for c in fourthpows if a + b + c < N) return len(goodnums)
def p005(N=20): primes = numty.sieve(N) ret_val = 1 for p in primes: tmp = p while tmp <= N: tmp *= p ret_val *= p return ret_val
def p035(N=10 ** 6): primes = numty.sieve(N) primeset = set(primes) count = 0 for p in primes: str_p = str(p) if all(int(str_p[n:] + str_p[:n]) in primeset for n in range(len(str_p))): logger.debug(p) count += 1 return count
def p046(): lim = 10**4 primes = numty.sieve(lim) table = [1, 0] * (lim / 2) table[1] = 1 for n in range(int(math.sqrt(lim / 2))): i = 2 * n**2 for p in primes: if p + i > lim: break table[p + i] = 1 return table.index(0)
def p046(): lim = 10**4 primes = numty.sieve(lim) table = [1,0]*(lim/2) table[1] = 1 for n in range(int(math.sqrt(lim/2))): i = 2*n**2 for p in primes: if p+i > lim: break table[p+i] = 1 return table.index(0)
def p035(N=10**6): primes = numty.sieve(N) primeset = set(primes) count = 0 for p in primes: str_p = str(p) if all( int(str_p[n:] + str_p[:n]) in primeset for n in range(len(str_p))): logger.debug(p) count += 1 return count
def p051(N=6,target=8): primes = numty.sieve(10**N) primes = [str(p) for p in primes if len(str(p)) == N] primeset = set(primes) masks = [bin(x)[2:].zfill(N) for x in range(1,2**N-1)] for prime in primes: for mask in masks: if len(set(''.join(b for a,b in zip(mask,prime) if a=='0'))) == 1: family = [''.join((b if a == '1' else str(i)) for a,b in zip(mask, prime)) for i in range(10)] family = [p for p in family if p in primeset] if len(family) == target: logger.debug(family) return prime
def decomps(N): decomps = [[] for n in range(N)] primes = set(numty.sieve(N)) for n in range(2,N): decomps[n].append([n]) if n in primes: continue for k in range(2,n): if k > n/2: break if n % k == 0: decomps[n] += [[k]+v for v in decomps[n/k] if all(k<=f for f in v)] return decomps
def gengraph(N): primes = numty.sieve(N) graph = defaultdict(list) for i in xrange(len(primes)): p = primes[i] for j in xrange(i): q = primes[j] if (p+q)%3 == 0: continue pq = int(str(p)+str(q)) qp = int(str(q)+str(p)) if numty.isprime(pq) and utils.isprime(qp): graph[p].append(q) graph[q].append(p) return graph
def p070(): primes = numty.sieve(10 ** 4) best = (1000, 0) for i, p in enumerate(primes): if p < 1000: continue for q in primes[i - 1 :: -1]: n = p * q if n > 10 ** 7: continue phi = (p - 1) * (q - 1) if sorted(str(phi)) == sorted(str(n)): cand = (1.0 * n / phi, n) if cand < best: best = cand return best[1]
def p070(): primes = numty.sieve(10**4) best = (1000,0) for i,p in enumerate(primes): if p < 1000: continue for q in primes[i-1::-1]: n = p*q if n > 10**7: continue phi = (p-1)*(q-1) if sorted(str(phi)) == sorted(str(n)): cand = (1.0*n/phi, n) if cand < best: best = cand return best[1]
def p051(N=6, target=8): primes = numty.sieve(10**N) primes = [str(p) for p in primes if len(str(p)) == N] primeset = set(primes) masks = [bin(x)[2:].zfill(N) for x in range(1, 2**N - 1)] for prime in primes: for mask in masks: if len(set(''.join(b for a, b in zip(mask, prime) if a == '0'))) == 1: family = [ ''.join((b if a == '1' else str(i)) for a, b in zip(mask, prime)) for i in range(10) ] family = [p for p in family if p in primeset] if len(family) == target: logger.debug(family) return prime
def p049(): found = 1487 primes = numty.sieve(10 ** 4) table = defaultdict(list) for p in primes: str_p = str(p) if len(str_p) < 4: continue table["".join(sorted(str_p))].append(p) for key in table: if len(table[key]) >= 3: cands = sorted(table[key]) for b in cands: for a in cands: if a >= b: break if 2 * b - a in cands: if a == found: continue return str(a) + str(b) + str(2 * b - a)
def p049(): found = 1487 primes = numty.sieve(10**4) table = defaultdict(list) for p in primes: str_p = str(p) if len(str_p) < 4: continue table[''.join(sorted(str_p))].append(p) for key in table: if len(table[key]) >= 3: cands = sorted(table[key]) for b in cands: for a in cands: if a >= b: break if 2*b-a in cands: if a == found: continue return str(a)+str(b)+str(2*b-a)
def p010(N=2*10**6): return sum(numty.sieve(2*10**6))
def p010(N=2 * 10**6): return sum(numty.sieve(2 * 10**6))
## What is the first number that can be written as the sum of primes in over # 5000 different ways? import lib.numty as numty table = numty.sieve(5000) cache = {} def primep(n, i): if n == 0: return 1 if i < 0: return 0 p = table[i] if (n,p) not in cache: cache[(n,p)] = sum(primep(n-p*k, i-1) for k in range(n/p+1)) return cache[(n,p)] def primepartitions(n): if n > table[-1]: raise ValueError("n=%d unexpectedly larger than largest summand %d" % (n, table[-1])) return primep(n,n) def p077(): for n in range(5000): if primepartitions(n) > 5000: return n