MCPcopy Create free account
hub / github.com/OriginQ/QPanda-2 / constModMul

Function constModMul

QAlg/ArithmeticUnit/ArithmeticUnit.cpp:514–541  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

512}
513
514QCircuit constModMul(QVec &qvec, int base, int module_Num, QVec &qvec1, QVec &qvec2, QVec &qvec3)
515{
516 QCircuit circuit, tmpcir, tmpcir1;
517 int tmpvalue, qsize = qvec.size();
518
519 for (int i = 0; i < qsize; i++)
520 {
521 tmpvalue = (base * (1 << i)) % module_Num;
522 circuit << constModAdd(qvec1, tmpvalue, module_Num, qvec2, qvec3).control(qvec[i]);
523 }
524
525 for (int i = 0; i < qsize; i++)
526 {
527 circuit << CNOT(qvec[i], qvec1[i]) << CNOT(qvec1[i], qvec[i]) << CNOT(qvec[i], qvec1[i]);
528 }
529
530 int Crev = modReverse(base, module_Num);
531
532 for (int i = 0; i < qsize; i++)
533 {
534 tmpvalue = (Crev * (1 << i)) % module_Num;
535 tmpcir1 << constModAdd(qvec1, tmpvalue, module_Num, qvec2, qvec3).control(qvec[i]);
536 }
537
538 circuit << tmpcir1.dagger();
539
540 return circuit;
541}
542
543QCircuit constModExp(QVec &qvec, QVec &result, int base, int module_Num, QVec &qvec1, QVec &qvec2, QVec &qvec3)
544{

Callers 1

constModExpFunction · 0.70

Calls 6

CNOTClass · 0.85
constModAddFunction · 0.70
modReverseFunction · 0.70
sizeMethod · 0.45
controlMethod · 0.45
daggerMethod · 0.45

Tested by

no test coverage detected