Four clear steps — then pick a divide-down loop or a multiply-up loop.
Require n > 0.
While n is divisible by 3, set n = n // 3.
If the remaining value is 1, it was a power of three.
Or start at 1 and multiply by 3 until you match or pass n.
Method
Idea
Time
Best for
Divide by 3
Peel factors of 3 until leftover is not divisible by 3
O(log n)
Default interview answer
Multiply up
Build 1, 3, 9, … until ≥ n
O(log n)
Showing the sequence explicitly
Pseudocode
Pseudocode
function is_power_of_three(n):
if n <= 0: return false
while n % 3 == 0:
n = n / 3
return n == 1
Reference
Cheat Sheet
Keep these facts handy while writing the program.
Topic
Detail
Test
Divide by 3 while possible; end at 1
1
3^0 — yes
0 / negatives
Not powers of three here
Avoid log
Floating point can misclassify
vs Power of 2
No simple n & (n-1) style trick
Classic checks
27 yes; 12 no; 9 yes
Try it
Live Preview
Enter an integer to see each divide-by-3 step and the final verdict.
Whole numbers only. Tap a chip or type a value.
Result
n = 27
Steps: 27 → 9 → 3 → 1
27 is a power of 3
Trace
Worked Walkthrough — n = 27
Divide by 3 whenever the remainder is zero; stop when you cannot.
Calculation
27 % 3 == 0 → 27 // 3 = 9
9 % 3 == 0 → 9 // 3 = 3
3 % 3 == 0 → 3 // 3 = 1
1 % 3 != 0 → stop
remaining == 1 → power of 3
Counterexample n = 12:
12 // 3 = 4
4 % 3 != 0 → stop at 4 ≠ 1 → not a power of 3
Code
Python Programs
Start with the divide loop — it is the clearest exact check. Use the multiply-up loop when you want to show the sequence growing.
Example 1 — Divide-by-3 Loop
Keep dividing while divisible by 3; success means you finish at 1.
python
def is_power_of_three(n):
if n <= 0:
return False
while n % 3 == 0:
n //= 3
return n == 1
number = 27
if is_power_of_three(number):
print(f"{number} is a power of 3")
else:
print(f"{number} is not a power of 3")
Output
27 is a power of 3
How It Works
Reject n <= 0 immediately.
While n % 3 == 0, divide by 3 — peel off factors of three.
When the loop stops, n is not divisible by 3 anymore.
If that leftover is 1, every factor was a 3.
Any other leftover (2, 4, 5, …) means extra prime factors remain.
Example 2 — Multiply-Up Loop
Grow 1, 3, 9, 27, … until you match n or pass it.
python
def is_power_of_three(n):
if n <= 0:
return False
power = 1
while power < n:
power *= 3
return power == n
print(is_power_of_three(1)) # True
print(is_power_of_three(27)) # True
print(is_power_of_three(12)) # False
print(is_power_of_three(0)) # False
Output
True
True
False
False
How It Works
Start at power = 1 (that is 3^0).
While power < n, multiply by 3 to build the next power.
Python ints grow as needed, so overflow is not a concern here.
Stop when power is at least n.
Equality means n sits on the power-of-three sequence.
Edge Cases & Pitfalls
Check these before calling the solution done.
1
30 counts
1 is a power of three. The divide loop never runs and returns true.
0
Not a power of 3
Guard with n > 0 before dividing.
Multiples
6, 12, 18…
Divisible by 3 once is not enough — leftover must be 1.
log
Prefer exact math
Avoid math.log for the interview solution; use integer loops.
Analysis
Time and Space Complexity
Program
Time
Extra space
Divide-by-3 loop
O(log n)
O(1)
Multiply-up loop
O(log n)
O(1)
Each step multiplies or divides by 3, so the number of iterations is proportional to the exponent.
Remember
Key Takeaways
Definition:n = 3k for some k ≥ 0.
Loop: divide by 3 while possible; success if you land on 1.
Alt: multiply 1 by 3 until you reach or pass n.
Test set: 1 → yes; 27 → yes; 12 → no; 0 → no.
One line: keep dividing by 3; if you finish at 1, n is a power of three.
Frequently Asked Questions
A positive integer of the form 3^k for some integer k ≥ 0. Examples: 1, 3, 9, 27, 81.
While n is divisible by 3, divide by 3. If you end at 1, n is a power of three. Or multiply a running power by 3 until it reaches or passes n.
Yes. 1 = 3^0.
Logarithms use floating point and can misclassify near powers. Exact integer divide or multiply loops are safer for interviews.
Both the divide loop and the multiply-up loop are O(log n) and use O(1) extra space.