I saw this question somewhere and thought I’d jot down an answer. I’m sure there’s a bit twiddling method to do this but I think this is about as fast as you’re going to get…
int power_of_3(uint32_t n) { switch(n) { case 1: return 1;break; case 3: return 1;break; case 9: return 1;break; case 27: return 1;break; case 81: return 1;break; case 243: return 1;break; case 729: return 1;break; case 2187: return 1;break; case 6561: return 1;break; case 19683: return 1;break; case 59049: return 1;break; case 177147: return 1;break; case 531441: return 1;break; case 1594323: return 1;break; case 4782969: return 1;break; case 14348907: return 1;break; case 43046721: return 1;break; case 129140163: return 1;break; case 387420489: return 1;break; case 1162261467: return 1;break; case 3486784401: return 1;break; }; return 0; }