示例#1
0
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
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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)
示例#7
0
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
示例#8
0
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
示例#9
0
def digital_sum(x):
    return sum(eu.digits(x))
示例#10
0
def test():    
    primes = [p for p in euler_util.primes(17)]
    print curious(euler_util.digits(1406357289), primes)
示例#11
0
def fact_sum(n):
    digs = eu.digits(n)
    return sum([math.factorial(x) for x in digs])
示例#12
0
def run():
    which_convergent = 100
    cf = [cf_e(i) for i in range(which_convergent)]
    b,c = convergent(cf)
    print sum(eu.digits(b))
示例#13
0
def curious(x):
    d = eu.digits(x)
    if len(d) == 1: return
    return sum([eu.fact(i) for i in d]) == x