def main(): v = fraction.Fraction(1, 2) cnt = 0 for i in range(1, 1000): v = contFraction(v) v = v.cancel() r = v + fraction.Fraction(1, 1) numseq = euler.intToSeq(r.num) denseq = euler.intToSeq(r.den) if len(numseq) > len(denseq): print i + 1 cnt += 1 print 'soln', cnt
def main(): v = fraction.Fraction(1,2) cnt = 0 for i in range(1,1000): v = contFraction(v) v = v.cancel() r = v+fraction.Fraction(1,1) numseq = euler.intToSeq(r.num) denseq = euler.intToSeq(r.den) if len(numseq) > len(denseq): print i+1 cnt += 1 print 'soln',cnt
def nDigitGen(n): lb,ub = bounds(n) res = [] for i in range(lb,ub+1): if len(euler.intToSeq(i**n)) == n: res.append( (i,i**n) ) return res
def nDigitGen(n): lb, ub = bounds(n) res = [] for i in range(lb, ub + 1): if len(euler.intToSeq(i**n)) == n: res.append((i, i**n)) return res
def valid(i): lst = [(-3,9),(-5,8),(-7,7),(-9,6),(-11,5),(-13,4)] #lst = [(-3,9),(-5,8),,(-11,5),(-13,4)] seq = euler.intToSeq(i) for a,b in lst: if seq[a] != b: return False return True
def valid(i): lst = [(-3, 9), (-5, 8), (-7, 7), (-9, 6), (-11, 5), (-13, 4)] #lst = [(-3,9),(-5,8),,(-11,5),(-13,4)] seq = euler.intToSeq(i) for a, b in lst: if seq[a] != b: return False return True
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 combine( dig, reploc, repval ): digseq = euler.intToSeq(dig) seqn = len(digseq) + len(reploc) j = 0 res = [ None for i in range(seqn) ] for i in range(seqn): if i in reploc: res[i] = repval else: res[i] = digseq[j] j += 1 if res[0] == 0: return None return res
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 combine(dig, reploc, repval): digseq = euler.intToSeq(dig) seqn = len(digseq) + len(reploc) j = 0 res = [None for i in range(seqn)] for i in range(seqn): if i in reploc: res[i] = repval else: res[i] = digseq[j] j += 1 if res[0] == 0: return None return res
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 ndigits(x): return len(euler.intToSeq(x))
def test_decreasing(self): self.assert_( isDecreasing(euler.intToSeq(134468))==False ) self.assert_( isDecreasing(euler.intToSeq(66420))==True ) self.assert_( isDecreasing(euler.intToSeq(155349))==False )
import euler import math def isPandigital(seq): a = set(seq).intersection(set(range(1,10))) return len(a) == 9 def fibiter(): a = 0 b = 1 yield a while 1: yield b a, b = b, a+b for i,v in enumerate(fibiter()):#xrange(2,100000): if isPandigital(euler.intToSeq(v % 10**9)): v2 = v / 10**(int(math.ceil(math.log10(v)))-11) v2 = euler.intToSeq(v2)[:9] print i if isPandigital(v2): break
def isPerm(a, b): return set(euler.intToSeq(a)) == set(euler.intToSeq(b))
import euler import math def isPandigital(seq): a = set(seq).intersection(set(range(1, 10))) return len(a) == 9 def fibiter(): a = 0 b = 1 yield a while 1: yield b a, b = b, a + b for i, v in enumerate(fibiter()): #xrange(2,100000): if isPandigital(euler.intToSeq(v % 10**9)): v2 = v / 10**(int(math.ceil(math.log10(v))) - 11) v2 = euler.intToSeq(v2)[:9] print i if isPandigital(v2): break
def relevant(i): a = euler.intToSeq(i) a.sort() b = euler.intToSeq(phi[i]) b.sort() return a == b
def max_perm(n): seq = euler.intToSeq(n) seq.sort() seq.reverse() return seq
def tright(n): seq = euler.intToSeq(n) return [seq[i:] for i in range(0, len(seq))]
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 tleft(n): seq = euler.intToSeq(n) return [ seq[:i] for i in range(1,len(seq)+1) ]
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 numberChainNext(n): seq = euler.intToSeq(n) seq = [i * i for i in seq] return sum(seq)
def isBouncy(n): seq = euler.intToSeq(n) return (not isIncreasing(seq)) and (not isDecreasing(seq))
def isPerm( a, b ): return set( euler.intToSeq(a) ) == set( euler.intToSeq(b) )
import euler res = [] for a in range(2,100): for b in range(2,100): v = sum(euler.intToSeq(a**b)) res.append(v) print max(res) # res.append([ sum(euler.intToSeq(2**b)) for b in range(100) ])) #print max(res)
def test_decreasing(self): self.assert_(isDecreasing(euler.intToSeq(134468)) == False) self.assert_(isDecreasing(euler.intToSeq(66420)) == True) self.assert_(isDecreasing(euler.intToSeq(155349)) == False)
def concatPrimes(a,b): astr = euler.intToSeq(a) bstr = euler.intToSeq(b) return euler.seqToInt(astr+bstr)
def concatPrimes(a, b): astr = euler.intToSeq(a) bstr = euler.intToSeq(b) return euler.seqToInt(astr + bstr)
def numberChainNext(n): seq = euler.intToSeq(n) seq = [ i*i for i in seq ] return sum(seq)
def relevant(i): a = euler.intToSeq(i) a.sort() b = euler.intToSeq(phi[i]) b.sort() return a==b
for j in impl(i,digits-1): 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 factorialChainNext(n): seq = euler.intToSeq(n) seq = [f[i] for i in seq] return sum(seq)
def factorialChainNext(n): seq = euler.intToSeq(n) seq = [ f[i] for i in seq ] return sum(seq)