示例#1
0
文件: euler.py 项目: smbell/euler
def prime_digit_replacement():
    primes = et.prime_sieve(9999999)[25:]
    chars = '0123456789'
    for p in primes:
        count = {}
        for s in str(p):
            if count.has_key(s):
                count[s] += 1
            else:
                count[s] = 1
        for key in count:
            if count[key] > 1:
                not_prime = 0
                for c in chars:
                    sp = str(p)
                    np = int(sp.replace(key, c))
                    if len(str(np)) != len(sp):
                        not_prime += 1
                        continue
                    if not et.is_prime(np):
                        not_prime += 1
                    if not_prime > 3:
                        break
                if not_prime < 3:
                    return p
示例#2
0
文件: p87.py 项目: smbell/euler
def solve(target = 50000000):
    primes = euler_tools.prime_sieve(int(math.sqrt(target)) + 1)
    squares = []
    cubes = []
    fourths = []
    for p in primes:
        squares.append(p**2)
    for p in primes:
        num = p**3
        if num > target:
            break
        cubes.append(num)
    for p in primes:
        num = p**4
        if num > target:
            break
        fourths.append(num)
    
    count = [0] * (target + 1)
    for s in squares:
        for c in cubes:
            for f in fourths:
                total = s + c + f
                if total <= target:
                    count[total] = 1
    return sum(count)
示例#3
0
文件: euler.py 项目: smbell/euler
def goldbach_other():
    primes = et.prime_sieve()
    dsquares = [2*(x**2) for x in range(1, 10**5 + 1)]
    for i in range(9, 10**5, 2):
        if i in primes:
            continue
        if not check_match(i, primes, dsquares):
            return i
示例#4
0
文件: p69.py 项目: smbell/euler
def tm():
    primes = et.prime_sieve()
    i = 0
    result = 1
    while result * primes[i] < 1000000:
        result *= primes[i]
        i += 1
    return result
示例#5
0
文件: p77.py 项目: smbell/euler
def solve(max_value=10**5, target=5000):
    primes = euler_tools.prime_sieve(max_value);
    current = 2
    while True:
    	ways = [0] * (current + 1)
    	ways[0] = 1
    	for i in range(0, len(primes)):
            for j in range(primes[i], current + 1):
                ways[j] += ways[j - primes[i]]
        if ways[current] >= target:
            return current
            #for i in range(len(ways)):
                #if ways[i] == target:
                    #return i
        current += 1
示例#6
0
文件: euler.py 项目: smbell/euler
def consecutive_prime_sum():
    primes = et.prime_sieve(1000000)
    max_count = 0
    found_prime = 0
    for i in range(len(primes)):
        for j in range(i + 1, len(primes)):
            if j - i < max_count:
                continue
            sp = sum(primes[i:j])
            if sp >= 1000000:
                break
            if sp in primes:
                max_count = j - i
                found_prime = sp
    return found_prime, max_count
示例#7
0
文件: euler.py 项目: smbell/euler
def prime_permuts():
    def get_length_4_primes(primes):
        return [x for x in primes if len(str(x)) == 4]

    def build_match_dict(primes):
        m = {}
        for i in primes:
            si = str(i)
            if len(si) != 4:
                continue
            key = ''.join(sorted(list(si)))
            if not m.has_key(key):
                m[key] = list()
            m[key].append(i)
        t = {}
        for k in m:
            if len(m[k]) >= 3:
                t[k] = m[k]
        return t

    def equal_diffs(nums):
        d = {}
        for i in range(len(nums)):
            for j in range(i + 1, len(nums)):
                diff = nums[j] - nums[i]
                if not d.has_key(diff):
                    d[diff] = set()
                d[diff].add(i)
                d[diff].add(j)
        ed = {}
        for k in d:
            if len(d[k]) < 3:
                continue
            l = list()
            for i in d[k]:
                l.append(nums[i])
            ed[k] = l
        return ed


    primes = get_length_4_primes(et.prime_sieve(10000))
    matches = build_match_dict(primes)
    l = list()
    for key in matches:
        nums = matches[key]
        diff_dict = equal_diffs(nums)
        l.append(diff_dict)
    return l
示例#8
0
文件: euler.py 项目: smbell/euler
def prime_pair_sets():
    primes = et.prime_sieve(10**4)
    prime_count = len(primes)
    min_sum = -1
    for a in range(prime_count):
        print a
        for b in range(a+1, prime_count):
            if not test_primes((primes[a], primes[b])):
                continue
            for c in range(b+1, prime_count):
                if not test_primes((primes[a], primes[b], primes[c])):
                    continue
                for d in range(c+1, prime_count):
                    if not test_primes((primes[a], primes[b], primes[c], primes[d])):
                        continue
                    for e in range(d+1, prime_count):
                        prime_set = primes[a], primes[b], primes[c], primes[d], primes[e]
                        if test_primes(prime_set):
                            if min_sum == -1 or min_sum > sum(prime_set):
                                min_sum = sum(prime_set)
                                print min_sum
    return min_sum