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
O(log n)
Default interview answer
Multiply up
Build 1, 3, 9, … until ≥ n
O(log n)
Showing the sequence explicitly
Pseudocode
Pseudocode
function IsPowerOfThree(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
C 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.
C
#include <stdio.h>
int is_power_of_three(int n)
{
if (n <= 0)
return 0;
while (n % 3 == 0)
n /= 3;
return n == 1;
}
int main(void)
{
int number = 27;
if (is_power_of_three(number))
printf("%d is a power of 3\n", number);
else
printf("%d is not a power of 3\n", number);
return 0;
}
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.
C
#include <stdio.h>
int is_power_of_three(int n)
{
long power;
if (n <= 0)
return 0;
power = 1;
while (power < n)
power *= 3;
return power == n;
}
int main(void)
{
printf("%d\n", is_power_of_three(1)); /* 1 */
printf("%d\n", is_power_of_three(27)); /* 1 */
printf("%d\n", is_power_of_three(12)); /* 0 */
printf("%d\n", is_power_of_three(0)); /* 0 */
return 0;
}
Output
1
1
0
0
How It Works
Start at power = 1 (that is 3^0).
While power < n, multiply by 3 to build the next power.
Use long so the multiply does not overflow before the comparison.
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 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.