def solve(): longestLength = 0 smallestMember = None seen = set() sieve(10**6) for n in xrange(2, 1000001): if n in seen: continue chainIndices = {n: 0} i = 0 while n > 1: n = aliquot(n) i += 1 if n > 1000000: break # This ^^ technically doesn't comply with a _prima facie_ # interpretation of the problem, but it makes the program terminate # in under a minute with the correct answer, so... if n in chainIndices: i2 = chainIndices[n] if i - i2 > longestLength: chain = [m for m,j in chainIndices.iteritems() if j >= i2] if all(m <= 1000000 for m in chain): longestLength = i - i2 smallestMember = min(chain) break elif n in seen: break seen.add(n) chainIndices[n] = i return smallestMember
def solve(): sieve(500) P = [Fraction(2 if isPrime(i) else 1, 3) for i in xrange(1, 501)] N = [1 - p for p in P] state = [Fraction(1, 500)] * 500 for primal in [P if c == 'P' else N for c in 'PPPPNNPPPNPPNPN']: state = jump(map(operator.mul, state, primal)) return sum(state)
def solve(): sieve(12000) cache = [0,0,0,0] + [None] * 12001 qty = 0 for d in xrange(4, 12001): cache[d] = twixtQty(d) - sum(cache[div] for div in divisors(d) if div != d) qty += cache[d] return qty
def solve(): factors = [0] * 20 accum = 1 sieve(20) for i in xrange(1, 21): for p,k in factor(i): if k > factors[p-1]: accum *= p ** (k - factors[p-1]) factors[p-1] = k return accum
def solve(): sieve(10**6) mdrs = [None] * 10**6 mdrs[0] = 0 # to emulate the omission of 1 from factorizations accum = 0 for n in xrange(2, 10**6): val = max(droot(d) + mdrs[n // d - 1] for d in divisors(n) if d != 1) accum += val mdrs[n-1] = val return accum
def solve(): n = 28123 sieve(n+1) summable = set() abundant = [] for i in xrange(1, n+1): if aliquot(i) > i: abundant.append(i) summable.update(i+j for j in abundant if i+j <= n) return n*(n+1) // 2 - sum(summable)
def solve(): sieve(10000) cache = {} accum = 0 for i in xrange(2, 10001): j = aliquot(i) if j < i and cache.get(j) == i: accum += i + j elif j > i: cache[i] = j return accum
def solve(): sieve(1000) qty = 2 # 2 and 5 for p in xrange(3, 1000000, 2): pstr = str(p) if ( all(c in "1379" for c in pstr) and isPrime(p, presieve=False) and all(isPrime(int(pstr[i:] + pstr[:i]), presieve=False) for i in range(1, len(pstr))) ): qty += 1 return qty
def solve(): sieve(10**7) new = [(d,d) for d in range(1, 10)] accum = 0 for _ in xrange(12): newer = [] for n,s in new: for d in xrange(10): n2 = n*10 + d s2 = s + d q,r = divmod(n2, s2) if r == 0: newer.append((n2, s2)) if isPrime(q, presieve=False): for e in [1,3,7,9]: m = n2 * 10 + e if isPrime(m, presieve=False): accum += m new = newer return accum
import sys from eulerlib import sieve P = sieve(1000000) S = set(P) def rotate(s, I): d = 0 for n in xrange(1 if 0 in I else 0, 10): C = [c for c in s] for i in I: C[i] = str(n) if int(''.join(C)) in S: d += 1 return d for p in P: s = str(p) for d in set(s): I = [] for i in xrange(len(s)): v = -1 if s[i] == d: I.append(i) v = rotate(s, I) if v == 8: print s found = True sys.exit(0)
from eulerlib import sieve N = 10000 M = 100000000 primes = sieve(N) prime_set = set(sieve(M)) def concat(a, b): return int(str(a) + str(b)) def get_concat_sets(n): if n == 0: return [] elif n == 1: return [[n] for n in primes] concat_sets = [] prev_sets = get_concat_sets(n - 1) for s in prev_sets: for p1 in primes[primes.index(max(s)) + 1:]: found = True for p2 in s: if concat(p1, p2) not in prime_set or concat( p2, p1) not in prime_set: found = False break if found: concat_sets.append(s + [p1])
from eulerlib import sieve N = 1000000 P = sieve(N) S = set(P) m = -1 p = -1 for i in xrange(len(P)): s = 0 j = i while s < N and j < len(P): s += P[j] j += 1 if s in S and j-i > m: m = j-i p = s print p
import sys; sys.path.insert(1, sys.path[0] + '/..') from eulerlib import factor, modInverse, cross, sieve def I(n): terms = [] for (p,k) in factor(n): if p % 2 == 0 and k>1: residues = (1, -1, (1<<k-1)-1, (1<<k-1)+1) else: residues = (1, -1) pk = p**k coef = n // pk * modInverse(n // pk, pk) terms.append(map(lambda x: x*coef, residues)) return max(filter(lambda x: x != n-1, (sum(res) % n for res in cross(*terms)))) sieve(2 * 10**7) #print sum(I(i) for i in xrange(3, 20000001)) for i in xrange(3, 20000001): print '%d\t%d' % (i, I(i))
from eulerlib import sieve N = 10000 M = 100000000 primes = sieve(N) prime_set = set(sieve(M)) def concat(a,b): return int(str(a)+str(b)) def get_concat_sets(n): if n == 0: return [] elif n == 1: return [[n] for n in primes] concat_sets = [] prev_sets = get_concat_sets(n-1) for s in prev_sets: for p1 in primes[primes.index(max(s))+1:]: found = True for p2 in s: if concat(p1,p2) not in prime_set or concat(p2,p1) not in prime_set: found = False break if found: concat_sets.append(s + [p1]) return concat_sets
def solve(): sieve(1000000) return sum(totient(n) for n in xrange(2, 1000001))
import sys from eulerlib import sieve P = sieve(1000000) S = set(P) def rotate(s,I): d = 0 for n in xrange(1 if 0 in I else 0, 10): C = [c for c in s] for i in I: C[i] = str(n) if int(''.join(C)) in S: d += 1 return d for p in P: s = str(p) for d in set(s): I = [] for i in xrange(len(s)): v = -1 if s[i] == d: I.append(i) v = rotate(s,I) if v == 8: print s found = True sys.exit(0)
from eulerlib import sieve N = 100000 S = [2 * n * n for n in xrange(N)] P = set(sieve(N)) C = [n for n in xrange(9, N, 2) if n not in P] for n in C: satisfied = False for s in S: if n - s in P: satisfied = True break if not satisfied: print n break
def solve(): sieve(10 ** 6) # just a guess return sum(islice(answers(), 25))
from eulerlib import sieve, cmpf N = 1000000 prime_factors = [[], [(1, 1)]] + [[] for n in xrange(N - 1)] phi = [0, 1] + [-1 for n in xrange(N - 1)] all_primes = sieve(N) sub_primes = [p for p in all_primes if p <= N / 2] #calculate prime factors for p in sub_primes: n = p while n <= N: m = n s = 0 while m % p == 0: s += 1 m /= p prime_factors[n].append((p, s)) n += p #calculate Euler Phi function for p in all_primes: n = p prev = phi[1] while n <= N: phi[n] = n - n / p prev = n n *= p
from eulerlib import sieve P = set(sieve(10000)) def isperm(a,b): s1 = set(str(a)) s2 = set(str(b)) return s1 == s2 for n0 in xrange(1000,10000): if n0 not in P: continue for i in xrange(1,10000): n1 = n0 + i n2 = n1 + i if n1 > 9999 or n2 > 9999: break if n1 in P and n2 in P and isperm(n0,n1) and isperm(n0,n2): print n0,n1,n2,i
def solve(): n = 10001 sieve(ceil(n*log(n) + n*log(log(n)))) return nth(primeIter(), n-1)
from eulerlib import sieve N = 100000 S = [2*n*n for n in xrange(N)] P = set(sieve(N)) C = [n for n in xrange(9,N,2) if n not in P] for n in C: satisfied = False for s in S: if n-s in P: satisfied = True break if not satisfied: print n break
from eulerlib import sieve, cmpf N = 1000000 prime_factors = [[],[(1,1)]] + [[] for n in xrange(N-1)] phi = [0,1] + [-1 for n in xrange(N-1)] all_primes = sieve(N) sub_primes = [p for p in all_primes if p <= N/2] #calculate prime factors for p in sub_primes: n = p while n <= N: m = n s = 0 while m % p == 0: s += 1 m /= p prime_factors[n].append((p,s)) n += p #calculate Euler Phi function for p in all_primes: n = p prev = phi[1] while n <= N: phi[n] = n - n/p prev = n n *= p
from eulerlib import sieve P = set(sieve(1000000)) def iscircular(n): s = str(n) for i in xrange(len(s)): if int(s[i:] + s[:i]) not in P: return False return True N = [n for n in xrange(1000000) if iscircular(n)] print len(N)
def solve(): sieve(10**8) # A 9-pandigital cannot be prime. return primeSets(set("123456789"))