Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); Unify primality checking by ngiachou · Pull Request #6228 · TheAlgorithms/Python · GitHub
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion DIRECTORY.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -444,7 +444,6 @@
* [Scoring Functions](machine_learning/scoring_functions.py)
* [Sequential Minimum Optimization](machine_learning/sequential_minimum_optimization.py)
* [Similarity Search](machine_learning/similarity_search.py)
* [Support Vector Machines](machine_learning/support_vector_machines.py)
* [Word Frequency Functions](machine_learning/word_frequency_functions.py)

## Maths
Expand DownExpand Up@@ -910,6 +909,7 @@

## Scheduling
* [First Come First Served](scheduling/first_come_first_served.py)
* [Highest Response Ratio Next](scheduling/highest_response_ratio_next.py)
* [Multi Level Feedback Queue](scheduling/multi_level_feedback_queue.py)
* [Non Preemptive Shortest Job First](scheduling/non_preemptive_shortest_job_first.py)
* [Round Robin](scheduling/round_robin.py)
Expand DownExpand Up@@ -1016,6 +1016,7 @@
* [Reverse Words](strings/reverse_words.py)
* [Split](strings/split.py)
* [Upper](strings/upper.py)
* [Wave](strings/wave.py)
* [Wildcard Pattern Matching](strings/wildcard_pattern_matching.py)
* [Word Occurrence](strings/word_occurrence.py)
* [Word Patterns](strings/word_patterns.py)
Expand Down
4 changes: 2 additions & 2 deletions data_structures/hashing/double_hash.py
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
from .hash_table import HashTable
from .number_theory.prime_numbers import check_prime, next_prime
from .number_theory.prime_numbers import is_prime, next_prime


class DoubleHash(HashTable):
Expand All@@ -15,7 +15,7 @@ def __hash_function_2(self, value, data):

next_prime_gt = (
next_prime(value % self.size_table)
if not check_prime(value % self.size_table)
if not is_prime(value % self.size_table)
else value % self.size_table
) # gt = bigger than
return next_prime_gt - (data % next_prime_gt)
Expand Down
50 changes: 40 additions & 10 deletions data_structures/hashing/number_theory/prime_numbers.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -3,25 +3,55 @@
module to operations with prime numbers
"""

import math

def check_prime(number):
"""
it's not the best solution

def is_prime(number: int) -> bool:
"""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
"""
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):
value = factor * value
first_value_val = value

while not check_prime(value):
while not is_prime(value):
value += 1 if not ("desc" in kwargs.keys() and kwargs["desc"] is True) else -1

if value == first_value_val:
Expand Down
61 changes: 33 additions & 28 deletions maths/prime_check.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -4,31 +4,36 @@
import unittest


def prime_check(number: int) -> bool:
def is_prime(number: int) -> bool:
"""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.

>>> prime_check(0)
>>> is_prime(0)
False
>>> prime_check(1)
>>> is_prime(1)
False
>>> prime_check(2)
>>> is_prime(2)
True
>>> prime_check(3)
>>> is_prime(3)
True
>>> prime_check(27)
>>> is_prime(27)
False
>>> prime_check(87)
>>> is_prime(87)
False
>>> prime_check(563)
>>> is_prime(563)
True
>>> prime_check(2999)
>>> is_prime(2999)
True
>>> prime_check(67483)
>>> is_prime(67483)
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 All@@ -42,35 +47,35 @@ def prime_check(number: int) -> bool:

class Test(unittest.TestCase):
def test_primes(self):
self.assertTrue(prime_check(2))
self.assertTrue(prime_check(3))
self.assertTrue(prime_check(5))
self.assertTrue(prime_check(7))
self.assertTrue(prime_check(11))
self.assertTrue(prime_check(13))
self.assertTrue(prime_check(17))
self.assertTrue(prime_check(19))
self.assertTrue(prime_check(23))
self.assertTrue(prime_check(29))
self.assertTrue(is_prime(2))
self.assertTrue(is_prime(3))
self.assertTrue(is_prime(5))
self.assertTrue(is_prime(7))
self.assertTrue(is_prime(11))
self.assertTrue(is_prime(13))
self.assertTrue(is_prime(17))
self.assertTrue(is_prime(19))
self.assertTrue(is_prime(23))
self.assertTrue(is_prime(29))

def test_not_primes(self):
self.assertFalse(
prime_check(-19),
is_prime(-19),
"Negative numbers are excluded by definition of prime numbers.",
)
self.assertFalse(
prime_check(0),
is_prime(0),
"Zero doesn't have any positive factors, primes must have exactly two.",
)
self.assertFalse(
prime_check(1),
is_prime(1),
"One only has 1 positive factor, primes must have exactly two.",
)
self.assertFalse(prime_check(2 * 2))
self.assertFalse(prime_check(2 * 3))
self.assertFalse(prime_check(3 * 3))
self.assertFalse(prime_check(3 * 5))
self.assertFalse(prime_check(3 * 5 * 7))
self.assertFalse(is_prime(2 * 2))
self.assertFalse(is_prime(2 * 3))
self.assertFalse(is_prime(3 * 3))
self.assertFalse(is_prime(3 * 5))
self.assertFalse(is_prime(3 * 5 * 7))


if __name__ == "__main__":
Expand Down
22 changes: 11 additions & 11 deletions maths/primelib.py
Original file line numberDiff line numberDiff line change
Expand Up@@ -41,7 +41,7 @@
from math import sqrt


def isPrime(number):
def is_prime(number: int) -> bool:
"""
input: positive integer 'number'
returns true if 'number' is prime otherwise false.
Expand DownExpand Up@@ -129,7 +129,7 @@ def getPrimeNumbers(N):
# if a number is prime then appends to list 'ans'
for number in range(2, N + 1):

if isPrime(number):
if is_prime(number):

ans.append(number)

Expand DownExpand Up@@ -164,11 +164,11 @@ def primeFactorization(number):
ans.append(number)

# if 'number' not prime then builds the prime factorization of 'number'
elif not isPrime(number):
elif not is_prime(number):

while quotient != 1:

if isPrime(factor) and (quotient % factor == 0):
if is_prime(factor) and (quotient % factor == 0):
ans.append(factor)
quotient /= factor
else:
Expand DownExpand Up@@ -317,8 +317,8 @@ def goldbach(number):
isinstance(ans, list)
and (len(ans) == 2)
and (ans[0] + ans[1] == number)
and isPrime(ans[0])
and isPrime(ans[1])
and is_prime(ans[0])
and is_prime(ans[1])
), "'ans' must contains two primes. And sum of elements must been eq 'number'"

return ans
Expand DownExpand Up@@ -462,11 +462,11 @@ def getPrime(n):

# if ans not prime then
# runs to the next prime number.
while not isPrime(ans):
while not is_prime(ans):
ans += 1

# precondition
assert isinstance(ans, int) and isPrime(
assert isinstance(ans, int) and is_prime(
ans
), "'ans' must been a prime number and from type int"

Expand All@@ -486,7 +486,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# precondition
assert (
isPrime(pNumber1) and isPrime(pNumber2) and (pNumber1 < pNumber2)
is_prime(pNumber1) and is_prime(pNumber2) and (pNumber1 < pNumber2)
), "The arguments must been prime numbers and 'pNumber1' < 'pNumber2'"

number = pNumber1 + 1 # jump to the next number
Expand All@@ -495,7 +495,7 @@ def getPrimesBetween(pNumber1, pNumber2):

# if number is not prime then
# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

while number < pNumber2:
Expand All@@ -505,7 +505,7 @@ def getPrimesBetween(pNumber1, pNumber2):
number += 1

# fetch the next prime number.
while not isPrime(number):
while not is_prime(number):
number += 1

# precondition
Expand Down