Advertisement
danchaofan

Euler #315

Nov 21st, 2019
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.00 KB | None | 0 0
  1. def primes(n):
  2.     sieve = [True] * n
  3.     for i in range(3, int(n**0.5)+1, 2):
  4.         if sieve[i]:
  5.             sieve[i*i::2*i] = [False]*((n-i*i-1)//(2*i)+1)
  6.     return [2] + [i for i in range(3, n, 2) if sieve[i]]
  7.  
  8.  
  9. def digsum(n):
  10.     total = 0
  11.     for digit in str(n):
  12.         total += int(digit)
  13.     return total
  14.  
  15.  
  16. def energysave(before, after):
  17.     before, safe = str(before)[-len(str(after)):], 0
  18.     for digit in range(len(before)):
  19.         num1, num2 = lights[int(before[digit])], lights[(int(str(after)[digit]))]
  20.         for digit2 in range(7):
  21.             if num1[digit2] == num2[digit2] == "1":
  22.                 safe += 1
  23.     return safe*2
  24.  
  25.  
  26. totalsafe = 0
  27. lights = ["1110111", "0000011", "0111110", "0011111", "1001011", "1011101", "1111101", "1010011", "1111111", "1011111"]
  28. for x in primes(2*10**7+1)[len(primes(10**7+1)):]:
  29.     while True:
  30.         totalsafe += energysave(x, digsum(x))
  31.         if len(str(digsum(x))) == 1:
  32.             break
  33.         x = digsum(x)
  34. print(totalsafe)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement