Find the powertrain!
Haskell, 67 64 bytes

(>>=(==))>>=until$p.show is an unnamed function taking an integer as input and returning its powertrain.

Saved 3 bytes thanks to Zgarb



p(x:y:r)=p[x]^p[y]*p r;p[]=1;p x=read x
(&gt;&gt;=(==))&gt;&gt;=until$p.show