Пример #1
0
def are_prime(l):
  for n in l:
    is_p = primes_map.get(n, None)
    if is_p is None:
      is_p = euler.is_prime(n)
      primes_map[n] = is_p
    if not is_p: return False
  return True
Пример #2
0
def test(a, b):
  n = 0
  while 1:
    term = f(n, a, b)
    p = primes.get(term, None) 
    if p is None:
      p = euler.is_prime(term)
      primes[term] = p
    if p:
      n+=1
    else: break
  return n
Пример #3
0
 
"""
http://projecteuler.net/index.php?section=problems&id=58
"""

from lib import spiraldiagonals
from lib import euler

"""
this is pretty easy - we can generate the diagonals indefinitely from the
formula we came up with in q28 and simply check the prime ratio

it's a bit slow, probably the prime check, but still less than a minute
"""

primes = []
ds = [1]
for i, diagonals in enumerate(spiraldiagonals.diagonals()):
  
  for d in diagonals:
    ds += [d]
    if euler.is_prime(d): primes += [d]
  ratio = float(len(primes)) / len(ds)
  if ratio <= 0.1:
    print (i+1)*2 + 1  # this is the spiral width
    break
    
Пример #4
0
"""
What is the largest n-digit pandigital prime that exists?
"""



from lib import euler
import math

digits = '123456789'

while digits:
  n = digits
  p = 0
  while 1:
    if int(n) > p and euler.is_prime(int(n)):
      p = int(n)
    try:
      n = ''.join(euler.lexicographic_permutation(n))
    except: break
  if p: break
  
  digits = digits[:-1]
  
print p