Skip to content

Commit b216222

Browse files
committed
added algorithm to find the kth divisor of a number
1 parent 4cb0741 commit b216222

File tree

6 files changed

+68
-14
lines changed

6 files changed

+68
-14
lines changed

allalgorithms/math/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
from .max_numbers import find_max
2+
from .kth_smallest_divisor import kth_divisor
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
# -*- coding: UTF-8 -*-
2+
#
3+
# Find the k-th smallest divisor of a natural number.
4+
# The All ▲lgorithms library for python
5+
#
6+
# Contributed by: Higor Santos
7+
# Github: @higorsnt
8+
#
9+
10+
11+
def kth_divisor(number, k):
12+
vector1 = []
13+
vector2 = []
14+
15+
for i in range(1, int(number ** 0.5) + 1):
16+
if number % i == 0:
17+
vector1.append(i)
18+
19+
if i != int(number ** 0.5) + 1:
20+
vector2.append(number // i)
21+
vector2.reverse()
22+
23+
if k > (len(vector1) + len(vector2)):
24+
raise ValueError("Doesn't Exist")
25+
else:
26+
if (k - 1) < len(vector1):
27+
return vector1[k - 1]
28+
else:
29+
return vector2[k - len(vector1) - 1]

allalgorithms/numeric/__init__.py

Lines changed: 0 additions & 1 deletion
This file was deleted.

tests/test_math.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
import unittest
2+
3+
from allalgorithms.math import (
4+
find_max,
5+
kth_divisor
6+
)
7+
8+
9+
class TestMath(unittest.TestCase):
10+
11+
def test_find_max_value(self):
12+
test_list = [3, 1, 8, 7, 4]
13+
self.assertEqual(8, find_max(test_list))
14+
15+
def test_find_kth_divisor_of_prime_number(self):
16+
self.assertEqual(1, kth_divisor(257, 1))
17+
self.assertEqual(257, kth_divisor(257, 2))
18+
with self.assertRaises(ValueError):
19+
kth_divisor(257, 3)
20+
21+
def test_find_kth_divisor_of_even_number(self):
22+
self.assertEqual(7, kth_divisor(728, 4))
23+
self.assertEqual(91, kth_divisor(728, 12))
24+
self.assertEqual(364, kth_divisor(728, 15))
25+
with self.assertRaises(ValueError):
26+
kth_divisor(728, 17)
27+
28+
def test_find_kth_divisor_of_odd_number(self):
29+
self.assertEqual(459, kth_divisor(162027, 9))
30+
self.assertEqual(18003, kth_divisor(162027, 14))
31+
self.assertEqual(162027, kth_divisor(162027, 16))
32+
with self.assertRaises(ValueError):
33+
kth_divisor(162027, 17)
34+
35+
36+
if __name__ == "__main__":
37+
unittest.main()

tests/test_numeric.py

Lines changed: 0 additions & 13 deletions
This file was deleted.

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy