Check this out:
3 ?- X is 5 // 2, Y is 5 rem 2.
X = 2,
Y = 1.
4 ?- 0 is 5 rem 2.
false.
So,
R being X^Y is the same as
R being .....
when Y is 0, OR
R being .....
when Y is 1, OR
R being R2*R2 and R2 being X^Y2
when Y is even, Y2 is Y // 2, OR
R being ..... and R2 being X^Y2
when Y is odd, Y2 is (Y-1) // 2.
or, in Prolog,
is_power(R,X,Y):- Y is 0, R is ... .
is_power(R,X,Y):- Y is 1, R is ... .
is_power(R,X,Y):- Y > 1, ... , is_power(R2,X,Y2), R is ...
...
To write the code that you ask for, you just decrement by 1 instead of halving (changing the rest of the code accordingly, of course).