- vector<cl_MI> r(n, a.R->zero());
- r[0] = a.R->one();
- Q.set_row(0, r);
- unsigned int max = (n-1) * q;
- for ( size_t m=1; m<=max; ++m ) {
- cl_MI rn_1 = r.back();
- for ( size_t i=n-1; i>0; --i ) {
- r[i] = r[i-1] - rn_1 * a[i];
- }
- r[0] = -rn_1 * a[0];
- if ( (m % q) == 0 ) {
- Q.set_row(m/q, r);
+// fast and buggy
+// vector<cl_MI> r(n, a.R->zero());
+// r[0] = a.R->one();
+// Q.set_row(0, r);
+// unsigned int max = (n-1) * q;
+// for ( size_t m=1; m<=max; ++m ) {
+// cl_MI rn_1 = r.back();
+// for ( size_t i=n-1; i>0; --i ) {
+// r[i] = r[i-1] - rn_1 * a[i];
+// }
+// r[0] = -rn_1 * a[0];
+// if ( (m % q) == 0 ) {
+// Q.set_row(m/q, r);
+// }
+// }
+// slow and (hopefully) correct
+ for ( size_t i=0; i<n; ++i ) {
+ UniPoly qk(a.R);
+ qk.set(i*q, a.R->one());
+ UniPoly r(a.R);
+ rem(qk, a, r);
+ Vec rvec;
+ for ( size_t j=0; j<n; ++j ) {
+ rvec.push_back(r[j]);