aboutsummaryrefslogtreecommitdiff
path: root/python/helper/prime.py
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2019-08-12 15:47:31 +0200
committerCharles <sircharlesaze@gmail.com>2019-08-12 15:47:31 +0200
commitbb515e51d67f37ba9c6dfbd2fd0930be873a5ada (patch)
treee86abea100d2c02a5dad7b6d5f0bf29c307bae04 /python/helper/prime.py
parent1879caa1dd80cb11dd62403663917ad4bf7cc68e (diff)
downloadproject_euler-bb515e51d67f37ba9c6dfbd2fd0930be873a5ada.tar.gz
project_euler-bb515e51d67f37ba9c6dfbd2fd0930be873a5ada.tar.bz2
project_euler-bb515e51d67f37ba9c6dfbd2fd0930be873a5ada.zip
haskell problems 007 -> 010
Diffstat (limited to 'python/helper/prime.py')
-rw-r--r--python/helper/prime.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/python/helper/prime.py b/python/helper/prime.py
new file mode 100644
index 0000000..1107c7c
--- /dev/null
+++ b/python/helper/prime.py
@@ -0,0 +1,41 @@
+from math import floor, sqrt
+from itertools import count
+
+
+def is_prime(number):
+ if number == 1:
+ return False
+
+ if number == 2:
+ return True
+ if number > 2 and number % 2 == 0:
+ return False
+
+ boundary = floor(sqrt(number)) + 1
+ for div in range(3, boundary, 2):
+ if number % div == 0:
+ return False
+ return True
+
+
+def primes_until(max_range):
+ for x in range(2, max_range):
+ if is_prime(x):
+ yield x
+
+
+def primes_loop():
+ for i in count(2):
+ if is_prime(i):
+ yield i
+
+
+def get_prime_factors(num):
+ factors = []
+ while num > 1:
+ for i in primes_loop():
+ if num % i == 0:
+ factors.append(i)
+ num = num // i
+ break
+ return factors