def ID050(): limit = 1000000 primes = EulerFuncs.primes_below(limit) check_prime = set(primes) p_sums = [0] s = 0 # Sum of consecutive primes for p in primes: s += p if s >= limit: break p_sums.append(s) longest = 0 prime = 0 # Checks sum of all combinations of primes that sums < limit for n, p_sum_small in enumerate(p_sums): for j, p_sum_big in enumerate(p_sums): num_btw = j-n difference = p_sum_big - p_sum_small # 'in' for a set is much faster than with a list if num_btw > longest and difference in check_prime: longest = num_btw prime = difference return "num consecutive: %s, prime: %s" % (longest, prime)
def _iterate_totient(limit): """Iteratively calculates the totient function for values under a limit """ primes = EulerFuncs.primes_below(limit) sieve = [n for n in xrange(limit)] for p in primes: mult = p while mult < limit: sieve[mult] *= (1-1/float(p)) mult += p return sieve
def ID038(): n = 9182 stop = 10000 limit = 1000000000 largest = 918273645 for n in xrange(n, stop): product_concat = str(n) n = 2 while 1: product = n * n n += 1 if int(product_concat + str(product)) > limit: break product_concat += str(product) if int(product_concat) > largest and EulerFuncs.is_pandigital(product_concat): largest = int(product_concat) return largest
def test_pandigital(): print EulerFuncs.is_pandigital(12345678) print EulerFuncs.is_pandigital(123456789) print EulerFuncs.is_pandigital(1234567890) print EulerFuncs.is_pandigital(203456789) print EulerFuncs.is_pandigital(234567189)
''' Created on Jan 8, 2012 @author: Admin ''' import EulerFuncs import timeit def test_sieve_time(): TRIALS = 20 t = timeit.Timer("EulerFuncs.primes_below(1000000)", "import EulerFuncs") print "Own: %.4f s/pass" % (t.timeit(number=TRIALS)/TRIALS) t = timeit.Timer("EulerFuncs.primes_under(1000000)", "import EulerFuncs") print "Old: %.4f s/pass" % (t.timeit(number=TRIALS)/TRIALS) def test_pandigital(): print EulerFuncs.is_pandigital(12345678) print EulerFuncs.is_pandigital(123456789) print EulerFuncs.is_pandigital(1234567890) print EulerFuncs.is_pandigital(203456789) print EulerFuncs.is_pandigital(234567189) if __name__ == "__main__": print sum(EulerFuncs.primes_below(1000)[3:24]) print EulerFuncs.primes_below(1000)[23]
#!/usr/bin/env python # date: Apr 23, 2012 import EulerFuncs import itertools def str_permute(s): perms = list(itertools.permutations(s)) for i in xrange(len(perms)): perms[i] = "".join(str(i) for i in perms[i]) return perms # find primes 1000 <= primes < 10000 limit = 10000 primes = EulerFuncs.primes_below(limit) primes = primes[primes.index(1009):] primes_set = set(primes) for i in xrange(len(primes)): for j in xrange(i+1, len(primes)): prime1 = primes[i] prime2 = primes[j] diff = prime2 - prime1 prime3 = prime2 + diff # check if prime3 is prime if prime3 in primes_set: prime1_perm = str_permute(str(prime1)) # check if the three numbers are permutations of one another if str(prime2) in prime1_perm and str(prime3) in prime1_perm: print prime1, prime2, prime3