mirror of
https://hub.njuu.cf/TheAlgorithms/Python.git
synced 2023-10-11 13:06:12 +08:00
improved prime numbers implementation (#1606)
* improved prime numbers implementation * fixup! Format Python code with psf/black push * fix type hint * fixup! Format Python code with psf/black push * fix doctests * updating DIRECTORY.md * added prime tests with negative numbers * using for instead filter * updating DIRECTORY.md * Remove unused typing.List * Remove tab indentation * print("Sorted order is:", " ".join(a))
This commit is contained in:
parent
ccc1ff2ce8
commit
938dd0bbb5
@ -133,6 +133,7 @@
|
||||
* [Gaussian Filter](https://github.com/TheAlgorithms/Python/blob/master/digital_image_processing/filters/gaussian_filter.py)
|
||||
* [Median Filter](https://github.com/TheAlgorithms/Python/blob/master/digital_image_processing/filters/median_filter.py)
|
||||
* [Sobel Filter](https://github.com/TheAlgorithms/Python/blob/master/digital_image_processing/filters/sobel_filter.py)
|
||||
* [Index Calculation](https://github.com/TheAlgorithms/Python/blob/master/digital_image_processing/index_calculation.py)
|
||||
* Rotation
|
||||
* [Rotation](https://github.com/TheAlgorithms/Python/blob/master/digital_image_processing/rotation/rotation.py)
|
||||
* [Test Digital Image Processing](https://github.com/TheAlgorithms/Python/blob/master/digital_image_processing/test_digital_image_processing.py)
|
||||
@ -216,6 +217,7 @@
|
||||
## Hashes
|
||||
* [Chaos Machine](https://github.com/TheAlgorithms/Python/blob/master/hashes/chaos_machine.py)
|
||||
* [Enigma Machine](https://github.com/TheAlgorithms/Python/blob/master/hashes/enigma_machine.py)
|
||||
* [Hamming Code](https://github.com/TheAlgorithms/Python/blob/master/hashes/hamming_code.py)
|
||||
* [Md5](https://github.com/TheAlgorithms/Python/blob/master/hashes/md5.py)
|
||||
* [Sha1](https://github.com/TheAlgorithms/Python/blob/master/hashes/sha1.py)
|
||||
|
||||
@ -234,6 +236,7 @@
|
||||
* [Linear Discriminant Analysis](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/linear_discriminant_analysis.py)
|
||||
* [Linear Regression](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/linear_regression.py)
|
||||
* [Logistic Regression](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/logistic_regression.py)
|
||||
* [Multilayer Perceptron Classifier](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/multilayer_perceptron_classifier.py)
|
||||
* [Polymonial Regression](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/polymonial_regression.py)
|
||||
* [Scoring Functions](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/scoring_functions.py)
|
||||
* [Sequential Minimum Optimization](https://github.com/TheAlgorithms/Python/blob/master/machine_learning/sequential_minimum_optimization.py)
|
||||
@ -252,6 +255,7 @@
|
||||
* [Binomial Coefficient](https://github.com/TheAlgorithms/Python/blob/master/maths/binomial_coefficient.py)
|
||||
* [Ceil](https://github.com/TheAlgorithms/Python/blob/master/maths/ceil.py)
|
||||
* [Collatz Sequence](https://github.com/TheAlgorithms/Python/blob/master/maths/collatz_sequence.py)
|
||||
* [Eulers Totient](https://github.com/TheAlgorithms/Python/blob/master/maths/eulers_totient.py)
|
||||
* [Explicit Euler](https://github.com/TheAlgorithms/Python/blob/master/maths/explicit_euler.py)
|
||||
* [Extended Euclidean Algorithm](https://github.com/TheAlgorithms/Python/blob/master/maths/extended_euclidean_algorithm.py)
|
||||
* [Factorial Python](https://github.com/TheAlgorithms/Python/blob/master/maths/factorial_python.py)
|
||||
@ -286,6 +290,7 @@
|
||||
* [Prime Factors](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_factors.py)
|
||||
* [Prime Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_numbers.py)
|
||||
* [Prime Sieve Eratosthenes](https://github.com/TheAlgorithms/Python/blob/master/maths/prime_sieve_eratosthenes.py)
|
||||
* [Pythagoras](https://github.com/TheAlgorithms/Python/blob/master/maths/pythagoras.py)
|
||||
* [Qr Decomposition](https://github.com/TheAlgorithms/Python/blob/master/maths/qr_decomposition.py)
|
||||
* [Quadratic Equations Complex Numbers](https://github.com/TheAlgorithms/Python/blob/master/maths/quadratic_equations_complex_numbers.py)
|
||||
* [Radix2 Fft](https://github.com/TheAlgorithms/Python/blob/master/maths/radix2_fft.py)
|
||||
@ -499,11 +504,11 @@
|
||||
* [I Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/i_sort.py)
|
||||
* [Insertion Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/insertion_sort.py)
|
||||
* [Merge Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/merge_sort.py)
|
||||
* [Merge Sort Fastest](https://github.com/TheAlgorithms/Python/blob/master/sorts/merge_sort_fastest.py)
|
||||
* [Odd Even Transposition Parallel](https://github.com/TheAlgorithms/Python/blob/master/sorts/odd_even_transposition_parallel.py)
|
||||
* [Odd Even Transposition Single Threaded](https://github.com/TheAlgorithms/Python/blob/master/sorts/odd_even_transposition_single_threaded.py)
|
||||
* [Pancake Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/pancake_sort.py)
|
||||
* [Pigeon Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/pigeon_sort.py)
|
||||
* [Pigeonhole Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/pigeonhole_sort.py)
|
||||
* [Quick Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/quick_sort.py)
|
||||
* [Quick Sort 3 Partition](https://github.com/TheAlgorithms/Python/blob/master/sorts/quick_sort_3_partition.py)
|
||||
* [Radix Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/radix_sort.py)
|
||||
@ -516,6 +521,7 @@
|
||||
* [Tim Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/tim_sort.py)
|
||||
* [Topological Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/topological_sort.py)
|
||||
* [Tree Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/tree_sort.py)
|
||||
* [Unknown Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/unknown_sort.py)
|
||||
* [Wiggle Sort](https://github.com/TheAlgorithms/Python/blob/master/sorts/wiggle_sort.py)
|
||||
|
||||
## Strings
|
||||
|
@ -30,7 +30,8 @@ class Heap(object):
|
||||
"""Performs changes required for swapping two elements in the heap"""
|
||||
# First update the indexes of the items in index map.
|
||||
self.pos_map[self.arr[i][0]], self.pos_map[self.arr[j][0]] = (
|
||||
self.pos_map[self.arr[j][0]], self.pos_map[self.arr[i][0]]
|
||||
self.pos_map[self.arr[j][0]],
|
||||
self.pos_map[self.arr[i][0]],
|
||||
)
|
||||
# Then swap the items in the list.
|
||||
self.arr[i], self.arr[j] = self.arr[j], self.arr[i]
|
||||
|
@ -176,10 +176,10 @@ class IndexCalculation:
|
||||
|
||||
def ARVI2(self):
|
||||
"""
|
||||
Atmospherically Resistant Vegetation Index 2
|
||||
https://www.indexdatabase.de/db/i-single.php?id=396
|
||||
:return: index
|
||||
−0.18+1.17*(self.nir−self.red)/(self.nir+self.red)
|
||||
Atmospherically Resistant Vegetation Index 2
|
||||
https://www.indexdatabase.de/db/i-single.php?id=396
|
||||
:return: index
|
||||
−0.18+1.17*(self.nir−self.red)/(self.nir+self.red)
|
||||
"""
|
||||
return -0.18 + (1.17 * ((self.nir - self.red) / (self.nir + self.red)))
|
||||
|
||||
|
@ -1,28 +1,34 @@
|
||||
from typing import List
|
||||
from typing import Generator
|
||||
|
||||
|
||||
def primes(max: int) -> List[int]:
|
||||
def primes(max: int) -> Generator[int, None, None]:
|
||||
"""
|
||||
Return a list of all primes numbers up to max.
|
||||
>>> primes(10)
|
||||
[2, 3, 5, 7]
|
||||
>>> primes(11)
|
||||
[2, 3, 5, 7, 11]
|
||||
>>> primes(25)
|
||||
>>> list(primes(0))
|
||||
[]
|
||||
>>> list(primes(-1))
|
||||
[]
|
||||
>>> list(primes(-10))
|
||||
[]
|
||||
>>> list(primes(25))
|
||||
[2, 3, 5, 7, 11, 13, 17, 19, 23]
|
||||
>>> primes(1_000_000)[-1]
|
||||
999983
|
||||
>>> list(primes(11))
|
||||
[2, 3, 5, 7, 11]
|
||||
>>> list(primes(33))
|
||||
[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31]
|
||||
>>> list(primes(10000))[-1]
|
||||
9973
|
||||
"""
|
||||
max += 1
|
||||
numbers = [False] * max
|
||||
ret = []
|
||||
for i in range(2, max):
|
||||
if not numbers[i]:
|
||||
for j in range(i, max, i):
|
||||
numbers[j] = True
|
||||
ret.append(i)
|
||||
return ret
|
||||
numbers: Generator = (i for i in range(1, (max + 1)))
|
||||
for i in (n for n in numbers if n > 1):
|
||||
for j in range(2, i):
|
||||
if (i % j) == 0:
|
||||
break
|
||||
else:
|
||||
yield i
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
print(primes(int(input("Calculate primes up to:\n>> "))))
|
||||
number = int(input("Calculate primes up to:\n>> ").strip())
|
||||
for ret in primes(number):
|
||||
print(ret)
|
||||
|
@ -36,8 +36,9 @@ def pigeonhole_sort(a):
|
||||
|
||||
|
||||
def main():
|
||||
pigeonhole_sort([8, 3, 2, 7, 4, 6, 8])
|
||||
print("Sorted order is: ", " ", join(a))
|
||||
a = [8, 3, 2, 7, 4, 6, 8]
|
||||
pigeonhole_sort(a)
|
||||
print("Sorted order is:", " ".join(a))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
Loading…
Reference in New Issue
Block a user