Exemple #1
0
def p27():
    global sieve
    testSieve = get_sieve_erosthane(15000)
    testSieve.sort()
    sieve = set(testSieve)
    primes = get_sieve_erosthane(1000)
    primes.sort()

    max, a, b = 0, 0, 0
    for j in primes:
        # A must be prime too
        for i in primes:
            # i + j > 0 
            if not i + j > 0 : pass

            # 1 + i + j is also a prime
            if not 1+i+j in sieve : pass

            n = check(i, j)
            if n > max : 
                max, a, b = n, i, j

            n = check(-i, j)
            if n > max : 
                max, a, b = n, -i, j

            # skipping -j as -ve numbers are not considered primes

    return (max, a, b)
Exemple #2
0
def p49():
    s = get_sieve_erosthane(9999, sort = True)
    sieve = [n for n in s if n >= 1000]
    sieveSet = set(sieve)

    answers = set()
    for n in sieve:

        perm = permutations(str(n))
        num = set([list_to_int(i) for i in perm if list_to_int(i) in sieveSet])
        if len(num) < 3 : continue

        num = list(num)
        num.sort()

        l = len(num)
        for i in range(0, l):
            for j in range(i+1, l):
                diff = num[j] - num[i]

                if num[i] + diff not in num or num[i] + 2 * diff not in num :
                    continue

                answers.add((num[i], num[i]+diff, num[i]+diff+diff))

    return answers
Exemple #3
0
def p41():
    numbers = ['0', '1', '21', '321', '4321', '54321', '654321', '7654321']

    # sqrt(999999999) = 31622
    sieve = get_sieve_erosthane(32000, sort = True)

    for i in range(7, 1, -1):
        perm = permutations(numbers[i])
        for p in perm:
            num = list_to_int(p)
            if pTest_sieve(num, sieve) : 
                return num
Exemple #4
0
def p46():
    n = 10000
    sieve = get_sieve_erosthane(n, method='set')
    
    for i in range(3, n, 2):
        # Since only composite numbers
        if i in sieve : continue

        # Count down from the number to 2 (smallest prime)
        success = False
        for j in range(1, i):
            # 2 x (j ^ 2)
            diff = i - (2 * j * j)

            if diff in sieve:
                #print i, diff, j
                success = True
                break

        if not success : return i
Exemple #5
0
def p37():
    limit = 740000
    sieve = get_sieve_erosthane(limit)
    sieve.sort()
    sieve_set = set(sieve)

    answer = []
    for n in sieve[4:]:
        ns = str(n)

        # Any number with a 0, 2, 5 cannot be a truncatable prime
        if '0' in ns or '2' in ns or '5' in ns : continue

        flag = True
        for i in range(1, len(ns)):
            if int(ns[i:]) not in sieve_set or int(ns[:i]) not in sieve_set :
                flag = False
                break

        if flag : answer.append(n)

    print answer
    return sum(answer)
Exemple #6
0
def p35():
    sieve = get_sieve_erosthane(1000000, 'set')

    # Starting with the obvious ones
    circularPrimes = [2, 3, 5, 7]
    for i in list(sieve)[4:]:
        flag = True
        si = str(i)
        if '2' in si or '5' in si or '0' in si:
            flag = False
        else:
            for j in rotate(si):
                # Converts a list of digits to a single integer
                n = reduce(lambda rst, d: int(rst) * 10 + int(d), j)

                if n not in sieve : 
                    flag = False
                    break
            
        if flag : 
            circularPrimes.append(i)
            #print i

    return len(circularPrimes)