Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def primes_sieve(limit):
- a = [True] * limit
- a[0] = a[1] = False
- for (i, isprime) in enumerate(a):
- if isprime:
- yield i
- for n in range(i*i, limit, i):
- a[n] = False
- def prime(n):
- if n == 2 or n == 3: return True
- if n < 2 or n%2 == 0: return False
- if n < 9: return True
- if n%3 == 0: return False
- r = int(n**0.5)
- f = 5
- while f <= r:
- if n%f == 0: return False
- if n%(f+2) == 0: return False
- f += 6
- return True
- def factorize(n):
- factors = []
- for x in range(1, int(n**0.5)+1):
- if n % x == 0:
- factors.append(x)
- return set(factors)
- answer = 0
- for b in [x - 1 for x in primes_sieve(10**8)]:
- if b == 6:
- answer += b
- continue
- if str(b)[-1] == "6":
- continue
- if str(b)[-2:] in ["08", "12", "20", "28", "32", "40", "48", "52", "60", "68", "72", "80", "88", "92", "00"]:
- continue
- for c in factorize(b):
- if not prime(c + int(b/c)):
- break
- if c == list(factorize(b))[-1]:
- answer += b
- print(answer)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement