| 228 | } |
| 229 | |
| 230 | QCircuit QMul(QVec& a, QVec& b, QVec& k, QVec& d) |
| 231 | { |
| 232 | QVec aa(a.begin(), a.end() - 1); |
| 233 | QVec bb(b.begin(), b.end() - 1); |
| 234 | QVec dd(d.begin(), d.end() - 1); |
| 235 | auto len = a.size(); |
| 236 | QCircuit circ, circ1; |
| 237 | circ1 << X(d[len * 2 - 2]); |
| 238 | circ << CNOT(a[len - 1], b[len - 1]); |
| 239 | circ << circ1.control(b[len - 1]); |
| 240 | circ << CNOT(a[len - 1], b[len - 1]); |
| 241 | circ << QMultiplier(aa, bb, k, dd); |
| 242 | return circ; |
| 243 | } |
| 244 | |
| 245 | QProg QDivider(QVec& a, QVec& b, QVec& c, QVec& k, ClassicalCondition& t) |
| 246 | { |