發現 IQFT 有其他的形式。

可依照開頭或是結尾擺放 SWAP gate,讓其運算在古典電腦上減少誤差。

模擬的理想輸出結果

模擬的理想輸出結果

OuO

Version 1

Version 1

Version 1

OuO

Version 1 OpenQASM code
OPENQASM 2.0;
include "qelib1.inc";

qreg q[4];
creg c[4];

x q[1];
x q[3];
barrier q[0], q[1], q[2], q[3];
h q[3];
cu1(pi / 2) q[2], q[3];
cu1(pi / 4) q[1], q[3];
cu1(pi / 8) q[0], q[3];
h q[2];
cu1(pi / 2) q[1], q[2];
cu1(pi / 4) q[0], q[2];
h q[1];
cu1(pi / 2) q[0], q[1];
h q[0];
swap q[0], q[3];
swap q[1], q[2];
barrier q[0], q[1], q[2], q[3];
swap q[1], q[2];
swap q[0], q[3];
h q[0];
cu1(-pi / 2) q[0], q[1];
h q[1];
cu1(-pi / 4) q[0], q[2];
cu1(-pi / 2) q[1], q[2];
h q[2];
cu1(-pi / 8) q[0], q[3];
cu1(-pi / 4) q[1], q[3];
cu1(-pi / 2) q[2], q[3];
h q[3];
barrier q[0], q[1], q[2], q[3];
measure q[0] -> c[0];
measure q[1] -> c[1];
measure q[2] -> c[2];
measure q[3] -> c[3];

Version 1 result on ibmq_lima

Version 1 result on ibmq_lima

OuO

Version 2

Version 2

Version 2

OuO

Version 2 OpenQASM code
OPENQASM 2.0;
include "qelib1.inc";

qreg q[4];
creg c[4];

x q[1];
x q[3];
barrier q[0], q[1], q[2], q[3];
h q[3];
cu1(pi / 2) q[2], q[3];
cu1(pi / 4) q[1], q[3];
cu1(pi / 8) q[0], q[3];
h q[2];
cu1(pi / 2) q[1], q[2];
cu1(pi / 4) q[0], q[2];
h q[1];
cu1(pi / 2) q[0], q[1];
h q[0];
swap q[0], q[3];
swap q[1], q[2];
barrier q[0], q[1], q[2], q[3];

h q[3];
cu1(-pi / 2) q[2], q[3];
cu1(-pi / 4) q[1], q[3];
cu1(-pi / 8) q[0], q[3];
h q[2];
cu1(-pi / 2) q[1], q[2];
cu1(-pi / 4) q[0], q[2];
h q[1];
cu1(-pi / 2) q[0], q[1];
h q[0];
swap q[0], q[3];
swap q[1], q[2];
barrier q[0], q[1], q[2], q[3];
measure q[0] -> c[0];
measure q[1] -> c[1];
measure q[2] -> c[2];
measure q[3] -> c[3];

Version 2 result on ibmq_lima

Version 2 result on ibmq_lima

OuO

結語

不過目前看起來 version 1 的執行結果好像似乎大概可能比 version 2 好。

References