tmp_felem
felem_mul(tmp_felem(num), tmp_felem(i - 1), tmp_felem(i));
felem_assign(tmp_felem(num), tmp_felem(0)); /* 1/Z(0) */
felem_mul(tmp_felem(i - 1), tmp_felem(i), Z(i));
felem_square(Z(i), tmp_felem(num)); /* 1/(Z^2) */
felem_mul(Z(i), Z(i), tmp_felem(num)); /* 1/(Z^3) */
felem_assign(tmp_felem(i - 1), tmp_felem(i));
felem_assign(tmp_felem(0), Z(0));
felem_one(tmp_felem(0));
felem_mul(tmp_felem(i), tmp_felem(i - 1), Z(i));
felem_assign(tmp_felem(i), tmp_felem(i - 1));
felem_inv(tmp_felem(num - 1), tmp_felem(num - 1));