Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
changes implementation of primality testing to be uniform
  • Loading branch information
ngiachou committed Jul 6, 2022
commit 323920784bc8ed946ad49a9a34293dba68337d52
46 changes: 38 additions & 8 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,48 @@
module to operations with prime numbers
"""

import math


def is_prime(number):
"""Checks to see if a number is a prime in O(sqrt(n)).

A number is prime if it has exactly two factors: 1 and itself.

>>> is_prime(0)
False
>>> is_prime(1)
False
>>> is_prime(2)
True
>>> is_prime(3)
True
>>> is_prime(27)
False
>>> is_prime(87)
False
>>> is_prime(563)
True
>>> is_prime(2999)
True
>>> is_prime(67483)
False
"""
it's not the best solution
"""
special_non_primes = [0, 1, 2]
if number in special_non_primes[:2]:
return 2
elif number == special_non_primes[-1]:
return 3

return all(number % i for i in range(2, number))
# precondition
assert isinstance(number, int) and (
number >= 0
), "'number' must been an int and positive"

if 1 < number < 4:
# 2 and 3 are primes
return True
elif number < 2 or not number % 2:
# Negatives, 0, 1 and all even numbers are not primes
return False

odd_numbers = range(3, int(math.sqrt(number) + 1), 2)
return not any(not number % i for i in odd_numbers)


def next_prime(value, factor=1, **kwargs):
Expand Down
5 changes: 5 additions & 0 deletions maths/prime_check.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,11 @@ def is_prime(number: int) -> bool:
False
"""

# precondition
assert isinstance(number, int) and (
number >= 0
), "'number' must been an int and positive"

if 1 < number < 4:
# 2 and 3 are primes
return True
Expand Down