-static void expt_pos(const umodpoly& a, unsigned int q, umodpoly& b)
-{
- throw runtime_error("expt_pos: not implemented!");
- // code below is not correct!
-// b.clear();
-// if ( a.empty() ) return;
-// b.resize(degree(a)*q+1, a[0].ring()->zero());
-// cl_MI norm = recip(a[0]);
-// umodpoly an = a;
-// for ( size_t i=0; i<an.size(); ++i ) {
-// an[i] = an[i] * norm;
-// }
-// b[0] = a[0].ring()->one();
-// for ( size_t i=1; i<b.size(); ++i ) {
-// for ( size_t j=1; j<i; ++j ) {
-// b[i] = b[i] + ((i-j+1)*q-i-1) * a[i-j] * b[j-1];
-// }
-// b[i] = b[i] / i;
-// }
-// cl_MI corr = expt_pos(a[0], q);
-// for ( size_t i=0; i<b.size(); ++i ) {
-// b[i] = b[i] * corr;
-// }
+static void expt_pos(umodpoly& a, unsigned int q)
+{
+ if ( a.empty() ) return;
+ cl_MI zero = a[0].ring()->zero();
+ int deg = degree(a);
+ a.resize(degree(a)*q+1, zero);
+ for ( int i=deg; i>0; --i ) {
+ a[i*q] = a[i];
+ a[i] = zero;
+ }