Пример #1
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
Пример #2
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
Пример #3
0
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
Пример #4
0
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
Пример #5
0
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
Пример #6
0
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
Пример #7
0
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)
Пример #8
0
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)
Пример #9
0
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
Пример #10
0
def concatPrimes(a,b):
    astr = euler.intToSeq(a)
    bstr = euler.intToSeq(b)
    return euler.seqToInt(astr+bstr)
Пример #11
0
def test(n):
    maxperm = euler.seqToInt(max_perm(n**3))
    y = int( math.ceil( maxperm**(1./3) ) )
    return y
Пример #12
0
                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)
Пример #13
0
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
Пример #14
0
def concatPrimes(a, b):
    astr = euler.intToSeq(a)
    bstr = euler.intToSeq(b)
    return euler.seqToInt(astr + bstr)
Пример #15
0
                    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

Пример #16
0

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
Пример #17
0
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
Пример #18
0
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
Пример #19
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