add a method smartPowmod()