def lychrel(n): cnt = 0 while 1: a = euler.intToSeq(n) b = list(reversed(a)) a = euler.seqToInt(a) b = euler.seqToInt(b) n = a+b if euler.palindrome(n): return True if cnt >50: return False cnt += 1 return True
def lychrel(n): cnt = 0 while 1: a = euler.intToSeq(n) b = list(reversed(a)) a = euler.seqToInt(a) b = euler.seqToInt(b) n = a + b if euler.palindrome(n): return True if cnt > 50: return False cnt += 1 return True
def getPrimes( dig, reploc ): vals = [ combine(dig,reploc,repval) for repval in range(10) ] # filter leading zeros vals = [ v for v in vals if v != None ] vals = [ euler.seqToInt(v) for v in vals ] vals = [ v for v in vals if euler.isprime(v) ] return vals
def getPrimes(dig, reploc): vals = [combine(dig, reploc, repval) for repval in range(10)] # filter leading zeros vals = [v for v in vals if v != None] vals = [euler.seqToInt(v) for v in vals] vals = [v for v in vals if euler.isprime(v)] return vals
def substringProps(seq): lst = [(i, i + 3) for i in range(1, 8)] div = [2, 3, 5, 7, 11, 13, 17] for divisor, pair in zip(div, lst): sub = seq[pair[0]:pair[1]] val = euler.seqToInt(sub) if val % divisor != 0: return False return True
def substringProps( seq ): lst = [ (i,i+3) for i in range(1,8) ] div = [2,3,5,7,11,13,17] for divisor,pair in zip(div,lst): sub = seq[pair[0]:pair[1]] val = euler.seqToInt( sub ) if val % divisor != 0: return False return True
def increasingIter(minv,digits): def impl(minv,digits): if digits == 0: yield [] else: for i in [0] + range(minv,10): for j in impl(i,digits-1): yield [i] + j for i in impl(minv,digits): yield euler.seqToInt(i)
def increasingIter(minv, digits): def impl(minv, digits): if digits == 0: yield [] else: for i in [0] + range(minv, 10): for j in impl(i, digits - 1): yield [i] + j for i in impl(minv, digits): yield euler.seqToInt(i)
import euler for i in range(9): print '----' lst = range(1, i + 2) lst.reverse() for perm in euler.permutations(lst): v = euler.seqToInt(perm) if euler.isprime(v): print v break
def concatPrimes(a,b): astr = euler.intToSeq(a) bstr = euler.intToSeq(b) return euler.seqToInt(astr+bstr)
def test(n): maxperm = euler.seqToInt(max_perm(n**3)) y = int( math.ceil( maxperm**(1./3) ) ) return y
res.append(s) return res def validPandigital(): for a in foo(2): for b in foo(7): for c in foo(17): s = set(a+b+c) if len(s) == 9: last = list(set(range(10)) - s)[0] x = [last] + a + b + c yield x def substringProps( seq ): lst = [ (i,i+3) for i in range(1,8) ] div = [2,3,5,7,11,13,17] for divisor,pair in zip(div,lst): sub = seq[pair[0]:pair[1]] val = euler.seqToInt( sub ) if val % divisor != 0: return False return True res = [] for x in validPandigital(): if substringProps(x): print x res.append( euler.seqToInt(x) ) print 'soln',sum(res)
import euler for i in range(9): print '----' lst = range(1,i+2) lst.reverse() for perm in euler.permutations(lst): v = euler.seqToInt(perm) if euler.isprime(v): print v break
def concatPrimes(a, b): astr = euler.intToSeq(a) bstr = euler.intToSeq(b) return euler.seqToInt(astr + bstr)
yield [i] + j for i in impl(minv,digits): yield euler.seqToInt(i) res = [] for i in set(increasingIter(0,6)): fc = factorialChain(i) fcl = len(fc)-1 if fcl == 60: res.append( i ) final = [] for r in res: s = set() for p in euler.permutations(euler.intToSeq(r)): v = euler.seqToInt(p) if factorialChainLength(v) == 60: s.add(v) for item in s: final.append(item) cnt = 0 final = list(set(final)) final.sort() for item in final: cnt += 1 print cnt,item,factorialChainLength(item) print 'soln',cnt
def tleft(n): seq = euler.intToSeq(n) return [seq[:i] for i in range(1, len(seq) + 1)] def tright(n): seq = euler.intToSeq(n) return [seq[i:] for i in range(0, len(seq))] def tall(n): return tleft(n) + tright(n) res = [] for n in euler.sieve(4000): if n > 7: seq = tall(n) seq = [euler.seqToInt(x) for x in seq] seq = [euler.isprime(x) for x in seq] val = reduce(lambda a, b: a and b, seq, True) if val: res.append(n) print n, seq print 'soln', sum(res) + 739397 #if sum([ 1 for x in seq if not euler.isprime(x) ]) == 0: # print n
import euler def tleft(n): seq = euler.intToSeq(n) return [ seq[:i] for i in range(1,len(seq)+1) ] def tright(n): seq = euler.intToSeq(n) return [ seq[i:] for i in range(0,len(seq)) ] def tall(n): return tleft(n) + tright(n) res = [] for n in euler.sieve(4000): if n > 7: seq = tall(n) seq = [ euler.seqToInt(x) for x in seq ] seq = [ euler.isprime(x) for x in seq ] val = reduce( lambda a,b : a and b, seq, True ) if val: res.append(n) print n,seq print 'soln',sum(res) + 739397 #if sum([ 1 for x in seq if not euler.isprime(x) ]) == 0: # print n
import euler def generate(n): res = [] c = 1 while len(res) < 9: res += euler.intToSeq(n*c) c+=1 if len(res) == 9: return res return None def isPandigital(seq): return len(seq) == len(set(seq)) and (0 not in seq) res = [] for i in range(1,10000): x = generate(i) if x != None: if isPandigital(x): res.append(euler.seqToInt(x)) print i,x res.sort() print res
for i in impl(minv, digits): yield euler.seqToInt(i) res = [] for i in set(increasingIter(0, 6)): fc = factorialChain(i) fcl = len(fc) - 1 if fcl == 60: res.append(i) final = [] for r in res: s = set() for p in euler.permutations(euler.intToSeq(r)): v = euler.seqToInt(p) if factorialChainLength(v) == 60: s.add(v) for item in s: final.append(item) cnt = 0 final = list(set(final)) final.sort() for item in final: cnt += 1 print cnt, item, factorialChainLength(item) print 'soln', cnt