+ if (is_exactly_a<power>(b)) {
+ const ex& bb(b.op(0));
+ ex qbar = a;
+ int exp_b = ex_to<numeric>(b.op(1)).to_int();
+ for (int i=exp_b; i>0; i--) {
+ if (!divide_in_z(qbar, bb, q, var))
+ return false;
+ qbar = q;
+ }
+ return true;
+ }
+
+ if (is_exactly_a<mul>(b)) {
+ ex qbar = a;
+ for (const_iterator itrb = b.begin(); itrb != b.end(); ++itrb) {
+ sym_desc_vec sym_stats;
+ get_symbol_stats(a, *itrb, sym_stats);
+ if (!divide_in_z(qbar, *itrb, q, sym_stats.begin()))
+ return false;
+
+ qbar = q;
+ }
+ return true;
+ }
+