예제 #1
0
def prime_numbers(**kwargs):
    from maths.misc import is_prime
    limit = kwargs.get('limit', None)
    start = kwargs.get('start', 1)
    if limit is None:
        import itertools
        for i in itertools.count(start,1):
            if is_prime(i):
                yield i
                
    else: 
        found_primes = 0
        i = start
        while found_primes < limit:
            if is_prime(i):
                found_primes += 1
                yield i
            i += 1
예제 #2
0
    num_digits = len(digits)
    
    for i in xrange(1, num_digits):
        # Remove digits from the right
        yield digit_list_to_num(digits[:i])
        
        # Remove digits from the left
        yield digit_list_to_num(digits[i:])
    

if __name__ == "__main__":
    matching_primes = []
    from maths.misc import is_prime
    from maths.sequences import prime_numbers
    
    exclusion_set = (2, 3, 5, 7)
    # Start prime search at 10
    for prime_number in prime_numbers(limit = None, start = 10):
        if len(matching_primes) > 10:
            break
        found_prime = True
        for n in remove_digits(prime_number):
            if n is 1 or not is_prime(n):
                found_prime = False
                break
        
        if found_prime:
            matching_primes.append(prime_number)
    print('Matching primes: %s'%matching_primes)
    print('The sum of matching primes is %d'%sum(matching_primes))
    
예제 #3
0
def list_to_num(digits):
    length = len(digits)
    num = 0
    for i in xrange(length):
        power = length - 1 - i
        num += digits[i] * 10**power
        
    return num

if __name__ == "__main__":
    from maths.misc import get_digits, is_prime
    
    circular_primes = []
    
    for i in xrange(2, 1000000):
        if not is_prime(i):
            continue
        prime = True
        digits = get_digits(i)
        for offset in xrange(1,len(digits)):
            shifted = shift_digits(digits, offset)

            num = list_to_num(shifted)
            
            if not is_prime(num):
                prime = False
                break
        if prime:
            circular_primes.append(i)
    print('The number of circular primes below 1,000,000 is %d'%len(circular_primes))
예제 #4
0
Considering quadratics of the form:

n^2 + an + b, where |a| < 1000 and |b| < 1000

where |n| is the modulus/absolute value of n
e.g. |11| = 11 and |-4| = 4
Find the product of the coefficients, a and b, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n = 0.
"""
if __name__ == "__main__":
    best_a, best_b, best_n = None, None, 0
    largest_prime = -1
    for a in xrange(-1000, 1001, 1):
        for b in xrange(-1000, 1001, 1):
            from maths.misc import is_prime
            
            prime = True
            n = 0
            while prime:
                result = n*n + a*n + b
                prime = is_prime(abs(result))
                
                if not prime:
                    break
                n += 1
            
            
            if n > best_n:
                best_a, best_b, best_n = a, b, n
    
    print('(a,b) = (%d, %d) with n = %d with a*b=%d'%(best_a, best_b, best_n, best_a*best_b))