def is_prime_permute(n): perms = [int(''.join(x)) for x in list(it.permutations(str(n), 4))] perms = list(set(perms)) perms_prime = [x for x in perms if fns.is_prime(x)] perms_diff = [[abs(x - y) for x in perms_prime] for y in perms_prime] perms_diff_count = [is_multi_count(x) for x in perms_diff] return any(perms_diff_count)
def nth_prime(n): prime_counter = 2 num_counter = 5 while 1 > 0: if fns.is_prime(num_counter): prime_counter += 1 if prime_counter == n: return num_counter num_counter += 2
# 8. n consecutive numbers with higest product n = 13 long_number = '7316717653133062491922511967442657474235534919493496983520312774506326239578318016984801869478851843858615607891129494954595017379583319528532088055111254069874715852386305071569329096329522744304355766896648950445244523161731856403098711121722383113622298934233803081353362766142828064444866452387493035890729629049156044077239071381051585930796086670172427121883998797908792274921901699720888093776657273330010533678812202354218097512545405947522435258490771167055601360483958644670632441572215539753697817977846174064955149290862569321978468622482839722413756570560574902614079729686524145351004748216637048440319989000889524345065854122758866688116427171479924442928230863465674813919123162824586178664583591245665294765456828489128831426076900422421902267105562632111110937054421750694165896040807198403850962455444362981230987879927244284909188845801561660979191338754992005240636899125607176060588611646710940507754100225698315520005593572972571636269561882670428252483600823257530420752963450' products = [] for i in xrange(n - 1, len(long_number)): products.append(reduce(lambda x, y: int(x) * int(y), long_number[(i - n + 1):(i + 1)])) print "Euler 8:", max(products), print "T:", time() - start; start = time() # 9. Pythagoeran triplet summing to 1000 n = 1000 for a in xrange(2, int(n/3)): for b in xrange(2, n): c = n - a - b if (a*a + b*b == c*c): output = a, b, c break print "Euler 9:", output[0] * output[1] * output[2], print "T:", time() - start; start = time() # 10. Sum of all primes below n n = int(2e6) prime_sum = 2 for i in xrange(3, n, 2): if fns.is_prime(i): prime_sum += i print "Euler 10:", prime_sum, print "T:", time() - start; start = time()
if int(i[6:9]) % 13 != 0: continue if int(i[7:10]) % 17 != 0:continue all_nums.append(int(i)) print "Euler 43:", sum(all_nums), print "T:", time.time() - start; start = time.time() # Triangle numbers def word_val_sum(word): return sum([ord(x) - ord("A") + 1 for x in word]) def gen_triangle_numbers(n): return [i * (i + 1) / 2 for i in xrange(1,n)] word_list = str.replace(open("../Data/Interesting/euler/42.txt", 'r').read(), '"', '').split(',') word_values = map(word_val_sum, word_list) triangle_numbers = gen_triangle_numbers(50) triangles_in_list = [x for x in word_values if x in triangle_numbers] print "Euler 42:", len(triangles_in_list), print "T:", time.time() - start; start = time.time() # Largest Pandigital prime for i in xrange(7654321, 0, -1): if "".join(sorted(str(i))) == "1234567": if(fns.is_prime(i)): break print "Euler 41:", i, print "T:", time.time() - start; start = time.time()
if len(mult_sum) >= 9: if "".join(sorted(mult_sum)) == '123456789': all_pans.append(int(mult_sum)) break j += 1 print "Euler 38:", max(all_pans), print "T:", time.time() - start; start = time.time() # Truncatable primes perms = ['1', '3', '5', '7', '9'] trunc_primes = [23] k = 2 while len(trunc_primes) < 11: all_candidates = [int(''.join(p)) for p in product(perms, repeat = k)] all_candidates = [j for j in all_candidates if fns.is_prime(j) == True] for i in all_candidates: all_facts = [str(i)[:j] for j in range(1, len(str(i)))] all_facts = [str(i)[j:] for j in range(1, len(str(i)))] + all_facts all_prime = all([fns.is_prime(int(j)) for j in all_facts]) if all_prime: trunc_primes.append(i) k = k + 1 print "Euler 37:", sum(trunc_primes), print "T:", time.time() - start; start = time.time() # bin-dec palindromes nmax = 1000000; all_pal = [] def is_palindrome(x):
def find_odd_comps(nmax): all_comps = [] for i in xrange(3, nmax, 2): if(not fns.is_prime(i)): all_comps.append(i) return all_comps
import fnsEuler as fns import pandas import numpy as np import itertools as it from itertools import product import time import math from collections import Counter start = time.time() # Longest list of primes nmax = 1000000 primes = [2] + [x for x in xrange(3, nmax/int(math.log(nmax)), 2) if fns.is_prime(x)] max_length = 0 for i in xrange(len(primes)): for j in xrange(i, len(primes)): current_sum = sum(primes[i:j]) if current_sum > nmax: break current_length = j - i if max_length >= current_length: continue if fns.is_prime(current_sum) and current_length > max_length: max_length = current_length max_sum = current_sum print "Euler 50:", max_sum, print "T:", time.time() - start; start = time.time()
# 28. Number diagonals n = 501 tot = 1 current_set = [1] for i in range(2, n+1): current_set = range(current_set[-1] + 2 * (i-1), current_set[-1] + (2 * (i-1)) * 5, 2 * (i-1)) tot += sum(current_set) print "Euler 28:", tot, print "T:", time.time() - start; start = time.time() # 27. Quadratic primes amax = bmax = 999 b_series = [i for i in range(-amax, amax, 2) if fns.is_prime(abs(i))] nmax = 0; best_team = [0, 0] for a in range(-bmax, bmax, 2): for b in b_series: n = 0 while (fns.is_prime(abs(n * n + a * n + b))): if n > nmax: nmax = n best_team = [a, b, n] n += 1 print "Euler 27:", best_team, best_team[0] * best_team[1], print "T:", time.time() - start; start = time.time() # 30. Fifth digit powers
def is_prime_couple(a, b): if fns.is_prime(int(str(a) + str(b))) and fns.is_prime(int(str(b) + str(a))): return True return False
import fnsEuler as fns import numpy as np import itertools as it from itertools import product import time import math from collections import Counter import sys start = time.time() # Prime pair sets nmax = 10000 primes_list = [x for x in xrange(1, nmax, 2) if fns.is_prime(x)] primes_set = set(primes_list) def is_prime_couple(a, b): if fns.is_prime(int(str(a) + str(b))) and fns.is_prime(int(str(b) + str(a))): return True return False prime_pair_hash = {} for p in primes_set: current_set = set() for p1 in primes_set: if p1 < p: continue if is_prime_couple(p, p1): current_set.add(p1) prime_pair_hash[p] = current_set