Initial commit
This commit is contained in:
54
primes.py
Normal file
54
primes.py
Normal file
@@ -0,0 +1,54 @@
|
||||
|
||||
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
|
||||
Reference in New Issue
Block a user