def run(): for power in euler_util.numbers(): start = 10**power cache = {} for i in range(start, int(math.ceil(10**(power + 1) / 6.0))): try: try: base_digs = cache[i] except KeyError: base_digs = euler_util.digits(i) base_digs.sort() cache[i] = base_digs for x in range(2, 7): val = x * i try: digs = cache[val] except KeyError: digs = euler_util.digits(val) digs.sort() cache[val] = digs if not digs == base_digs: raise Exc print i return except Exc: pass
def run(): primes = euler_util.GenFinder(euler_util.primes(9999)) for i in range(1000, 10000 - (3330 * 2)): if not primes.contains(i): continue j = i + 3330 if not primes.contains(j): continue k = j + 3330 if not primes.contains(k): continue idigs = euler_util.digits(i) idigs.sort() jdigs = euler_util.digits(j) jdigs.sort() if not idigs == jdigs: continue kdigs = euler_util.digits(k) kdigs.sort() if not kdigs == idigs: continue match = [i, j, k] match.sort() print match
def is_lychrel(x): digs = eu.digits(x) for i in range(49): rdigs = digs[:] rdigs.reverse() x += eu.undigits(rdigs) digs = eu.digits(x) if eu.palindrome(digs): return False return True
def curious(a,b): if a % 10 == 0 and b % 10 == 0: return False a_digits = euler_util.digits(a) b_digits = euler_util.digits(b) for aidx in range(2): for bidx in range(2): if a_digits[aidx] == b_digits[bidx]: if equiv(a,b,a_digits[alt(aidx)],b_digits[alt(bidx)]): return True return False
def run(): vals = [] for i in range(1000000): if i == sum([d**5 for d in euler_util.digits(i)]): vals.append(i) print vals print sum(vals) - 1
def run(target=8): pgen = eu.GenFinder(eu.gen_primes()) # Loop over all prime numbers for prime_idx in eu.numbers(): curr_prime = pgen[prime_idx] curr_digits = eu.digits(curr_prime) # digits in current prime # Get all selections of indices from current digits for rindices in eu.selections(range(len(curr_digits))): rzero = 0 in rindices if len(rindices) == 0: continue found_primes = [] work_digs = curr_digits[:] # copy digits of current prime # Choose the digit which we will insert at each index in rindices (the current selection) for replacement in range(10): if replacement == 0 and rzero: continue for rindex in rindices: work_digs[rindex] = replacement prime_idx = pgen.find(eu.undigits(work_digs)) if prime_idx != -1: found_primes.append(pgen[prime_idx]) if len(found_primes) >= target: # print "answer =",min(found_primes),found_primes,rindices return min(found_primes)
def run(): data = {} for i in range(1, 10000): val = pow(i,3) nval = eu.digits(val) nval.sort() nval.reverse() nval = eu.undigits(nval) try: data[nval].append(val) except KeyError: data[nval] = [val] min = None for k,v in data.items(): if len(v) == 5: if min is None or v[0] < min: min = v[0] return min
import euler_util def complete(x): y = x[:] y.sort() return y == range(1, 10) max_val = 0 for digits in euler_util.permutations(range(1,10), 4): base_value = euler_util.undigits(digits) for i in euler_util.numbers(2): curr_value = base_value * i digits += euler_util.digits(curr_value) if len(digits) > 9: break elif len(digits) == 9: if complete(digits): val = euler_util.undigits(digits) # print base_value,i,val if val > max_val: max_val = val break # print max_val
def digital_sum(x): return sum(eu.digits(x))
def test(): primes = [p for p in euler_util.primes(17)] print curious(euler_util.digits(1406357289), primes)
def fact_sum(n): digs = eu.digits(n) return sum([math.factorial(x) for x in digs])
def run(): which_convergent = 100 cf = [cf_e(i) for i in range(which_convergent)] b,c = convergent(cf) print sum(eu.digits(b))
def curious(x): d = eu.digits(x) if len(d) == 1: return return sum([eu.fact(i) for i in d]) == x