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
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))
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))
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))