File tree Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Expand file tree Collapse file tree 1 file changed +59
-0
lines changed Original file line number Diff line number Diff line change
1
+ def is_power (base : int , number : int ) -> bool :
2
+ """
3
+ Checks if a given integer `number` is a power of another integer `base`.
4
+
5
+ This function determines if there exists an integer x such that base^x = number.
6
+ It handles positive integers only and raises an error for non-positive inputs.
7
+ For more information, see: https://en.wikipedia.org/wiki/Power_of_two
8
+
9
+ Args:
10
+ base: The base integer (must be a positive integer).
11
+ number: The number to check if it's a power of base
12
+ (must be a positive integer).
13
+
14
+ Returns:
15
+ True if number is a power of base, False otherwise.
16
+
17
+ Raises:
18
+ ValueError: If base or number are not positive integers.
19
+
20
+ Examples:
21
+ >>> is_power(2, 8)
22
+ True
23
+ >>> is_power(3, 81)
24
+ True
25
+ >>> is_power(10, 1)
26
+ True
27
+ >>> is_power(5, 120)
28
+ False
29
+ >>> is_power(1, 1)
30
+ True
31
+ >>> is_power(1, 5)
32
+ False
33
+ >>> is_power(0, 5)
34
+ Traceback (most recent call last):
35
+ ...
36
+ ValueError: Both base and number must be positive integers
37
+ >>> is_power(4, -16)
38
+ Traceback (most recent call last):
39
+ ...
40
+ ValueError: Both base and number must be positive integers
41
+ """
42
+ if base <= 0 or number <= 0 :
43
+ raise ValueError ("Both base and number must be positive integers" )
44
+
45
+ if base == 1 :
46
+ return number == 1
47
+
48
+ # Repeatedly divide number by base until it's no longer divisible.
49
+ while number % base == 0 :
50
+ number //= base
51
+
52
+ # If number has been reduced to 1, it was a power of base.
53
+ return number == 1
54
+
55
+
56
+ if __name__ == "__main__" :
57
+ import doctest
58
+
59
+ doctest .testmod ()
You can’t perform that action at this time.
0 commit comments