Esempio n. 1
0
File: 037.py Progetto: sanand0/euler
def is_right_truncatable(l):
    is_truncatable = 1
    for size in xrange(0, len(l)):
        n = num(l[size:])
        prime._refresh(int(math.sqrt(n)))
        if not prime._isprime(n):
            is_truncatable = 0
            break
    return is_truncatable
Esempio n. 2
0
File: 037.py Progetto: sanand0/euler
def is_left_truncatable(l):
    is_truncatable = 1
    for size in xrange(1, len(l)+1):
        n = num(l[:size])
        prime._refresh(int(math.sqrt(n)))
        if not prime._isprime(n):
            is_truncatable = 0
            break
    return is_truncatable
Esempio n. 3
0
File: 041.py Progetto: sanand0/euler
'''
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once. For example, 2143 is a 4-digit pandigital and is also prime.

What is the largest n-digit pandigital prime that exists?
'''

import prime
from combinatorics import permutations

# Pan-digital primes are 4 or 7 digits. Others divisible by 3
prime._refresh(2766)    # sqrt(7654321)
for perm in permutations(range(7, 0, -1)):
    num = 0
    for n in perm: num = num * 10 + n
    if prime._isprime(num):
        print num
        break
Esempio n. 4
0
import prime
print prime.prime(11)
print prime._isprime(32)
print prime.isprime(11)
Esempio n. 5
0
File: 058.py Progetto: sanand0/euler
'''
Starting with 1 and spiralling anticlockwise in the following way, a square spiral with side length 7 is formed.

37 36 35 34 33 32 31
38 17 16 15 14 13 30
39 18  5  4  3 12 29
40 19  6  1  2 11 28
41 20  7  8  9 10 27
42 21 22 23 24 25 26
43 44 45 46 47 48 49

It is interesting to note that the odd squares lie along the bottom right diagonal, but what is more interesting is that 8 out of the 13 numbers lying along both diagonals are prime; that is, a ratio of 8/13 ~ 62%.

If one complete new layer is wrapped around the spiral above, a square spiral with side length 9 will be formed. If this process is continued, what is the side length of the square spiral for which the ratio of primes along both diagonals first falls below 10%?
'''

import prime
prime._refresh(50000)

width, diagonal, base, primes = 1, 1, 1, 0
while True:
    width = width + 2
    increment = width - 1
    for i in xrange(0, 4):
        diagonal = diagonal + increment
        if i < 3 and prime._isprime(diagonal): primes += 1
    base = base + 4
    if primes * 10 < base:
        print width
        break
Esempio n. 6
0
def concatenations_are_prime(primes):
    for pair in combinations(primes, 2):
        if not prime._isprime(cat(pair[0], pair[1])): return False
    return True