Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
0
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
Beispiel #5
0
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
Beispiel #6
0
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
Beispiel #7
0
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
Beispiel #8
0
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
Beispiel #9
0
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
Beispiel #10
0
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
Beispiel #11
0
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
Beispiel #12
0
def ndigits(x):
    return len(euler.intToSeq(x))
Beispiel #13
0
 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 )
Beispiel #14
0
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
Beispiel #15
0
def isPerm(a, b):
    return set(euler.intToSeq(a)) == set(euler.intToSeq(b))
Beispiel #16
0
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
Beispiel #17
0
def relevant(i):
    a = euler.intToSeq(i)
    a.sort()
    b = euler.intToSeq(phi[i])
    b.sort()
    return a == b
Beispiel #18
0
def max_perm(n):
    seq = euler.intToSeq(n)
    seq.sort()
    seq.reverse()
    return seq
Beispiel #19
0
def tright(n):
    seq = euler.intToSeq(n)
    return [seq[i:] for i in range(0, len(seq))]
Beispiel #20
0
def tleft(n):
    seq = euler.intToSeq(n)
    return [seq[:i] for i in range(1, len(seq) + 1)]
Beispiel #21
0
def tright(n):
    seq = euler.intToSeq(n)
    return [ seq[i:] for i in range(0,len(seq)) ]
Beispiel #22
0
def tleft(n):
    seq = euler.intToSeq(n)
    return [ seq[:i] for i in range(1,len(seq)+1) ]
Beispiel #23
0
    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
Beispiel #24
0
def numberChainNext(n):
    seq = euler.intToSeq(n)
    seq = [i * i for i in seq]
    return sum(seq)
Beispiel #25
0
def isBouncy(n):
    seq = euler.intToSeq(n)
    return (not isIncreasing(seq)) and (not isDecreasing(seq))
Beispiel #26
0
def isPerm( a, b ):
    return set( euler.intToSeq(a) ) == set( euler.intToSeq(b) )
Beispiel #27
0
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)
Beispiel #28
0
 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)
Beispiel #29
0
def concatPrimes(a,b):
    astr = euler.intToSeq(a)
    bstr = euler.intToSeq(b)
    return euler.seqToInt(astr+bstr)
Beispiel #30
0
def concatPrimes(a, b):
    astr = euler.intToSeq(a)
    bstr = euler.intToSeq(b)
    return euler.seqToInt(astr + bstr)
Beispiel #31
0
def numberChainNext(n):
    seq = euler.intToSeq(n)
    seq = [ i*i for i in seq ]
    return sum(seq)
Beispiel #32
0
def relevant(i):
    a = euler.intToSeq(i)
    a.sort()
    b = euler.intToSeq(phi[i])
    b.sort()
    return a==b
Beispiel #33
0
                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
Beispiel #34
0
def factorialChainNext(n):
    seq = euler.intToSeq(n)
    seq = [f[i] for i in seq]
    return sum(seq)
Beispiel #35
0
def factorialChainNext(n):
    seq = euler.intToSeq(n)
    seq = [ f[i] for i in seq ]
    return sum(seq)
Beispiel #36
0
def isBouncy(n):
    seq = euler.intToSeq(n)
    return (not isIncreasing(seq)) and (not isDecreasing(seq))