Advertisement
danchaofan

Euler #357

Dec 24th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.14 KB | None | 0 0
  1. def primes_sieve(limit):
  2.     a = [True] * limit
  3.     a[0] = a[1] = False
  4.  
  5.     for (i, isprime) in enumerate(a):
  6.         if isprime:
  7.             yield i
  8.             for n in range(i*i, limit, i):
  9.                 a[n] = False
  10.  
  11.  
  12. def prime(n):
  13.     if n == 2 or n == 3: return True
  14.     if n < 2 or n%2 == 0: return False
  15.     if n < 9: return True
  16.     if n%3 == 0: return False
  17.     r = int(n**0.5)
  18.     f = 5
  19.     while f <= r:
  20.         if n%f == 0: return False
  21.         if n%(f+2) == 0: return False
  22.         f += 6
  23.     return True
  24.  
  25.  
  26. def factorize(n):
  27.     factors = []
  28.     for x in range(1, int(n**0.5)+1):
  29.         if n % x == 0:
  30.             factors.append(x)
  31.     return set(factors)
  32.  
  33. answer = 0
  34. for b in [x - 1 for x in primes_sieve(10**8)]:
  35.     if b == 6:
  36.         answer += b
  37.         continue
  38.     if str(b)[-1] == "6":
  39.         continue
  40.     if str(b)[-2:] in ["08", "12", "20", "28", "32", "40", "48", "52", "60", "68", "72", "80", "88", "92", "00"]:
  41.         continue
  42.     for c in factorize(b):
  43.         if not prime(c + int(b/c)):
  44.             break
  45.         if c == list(factorize(b))[-1]:
  46.             answer += b
  47. print(answer)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement