| 201 | } |
| 202 | |
| 203 | QCircuit QMultiplier(QVec& a, QVec& b, QVec& k, QVec& d) |
| 204 | { |
| 205 | auto len = a.size(); |
| 206 | QVec c(a); |
| 207 | QVec tem(k.begin(), k.begin() + len); |
| 208 | c += tem; |
| 209 | auto t = k[len]; |
| 210 | QCircuit fcirc; |
| 211 | |
| 212 | QCircuit circ; |
| 213 | circ << QAdder(d, c, t); |
| 214 | fcirc << circ.control(b[0]); |
| 215 | |
| 216 | for (auto i = 1; i < len; i++) |
| 217 | { |
| 218 | QCircuit circ1; |
| 219 | fcirc << shift(c); |
| 220 | circ1 << QAdder(d, c, t); |
| 221 | fcirc << circ1.control(b[i]); |
| 222 | } |
| 223 | for (auto i = 1; i < len; i++) |
| 224 | { |
| 225 | fcirc << shift(c).dagger(); |
| 226 | } |
| 227 | return fcirc; |
| 228 | } |
| 229 | |
| 230 | QCircuit QMul(QVec& a, QVec& b, QVec& k, QVec& d) |
| 231 | { |