Files
project-euler/primes.py
2018-07-02 15:45:49 -04:00

55 lines
1.0 KiB
Python

def sieve(limit):
'''https://stackoverflow.com/a/3941967
'''
a = [True] * limit # Initialize the primality list
a[0] = a[1] = False
for (i, isprime) in enumerate(a):
if isprime:
yield i
for n in range(i*i, limit, i): # Mark factors non-prime
a[n] = False
def is_prime(n):
'''Returns True if n is prime.
https://stackoverflow.com/a/18833845'''
if n == 1:
return False
if n == 2:
return True
if n == 3:
return True
if n % 2 == 0:
return False
if n % 3 == 0:
return False
i = 5
w = 2
while i * i <= n:
if n % i == 0:
return False
i += w
w = 6 - w
return True
def prime_factors(n):
'''https://stackoverflow.com/a/22808285
'''
i = 2
factors = []
while i * i <= n:
if n % i:
i += 1
else:
n //= i
factors.append(i)
if n > 1:
factors.append(n)
return factors