在现存的模拟器中,选择了C++作为编程工具。为了降低
程序的复杂性,提高它的可读性,使用了模块化程序设计的思
想,把整个程序分成了几块,并大量地使用函数来优化程序机
构。程序的主要构成是几个块和一些函数,下面就一一介绍这
几个块和函数的基本功能和作用。
M1 既块它定义了一个复数类及其在复数域里面的
一些基本运算,如复数的+、一、*、/等,以及怎样给一个复数赋
值和怎样读出一个复数。以+为例,来看一下对复数的操作是
怎样进行的:
}f Oved~d’operator
C0mpl既C锄pl既::叩e豫llDr+(C0mpkx c){
Complex协1p;
doyle l'lf~r—
real,new
— in1a ;
new
— re =real+c.Real();
I跏
一imagir~'y=i玎1a舀磁町+c.h国 ();
map.Set(new—real,new一~ nm'y);
return map;
{
QLlbit块 它定义了一个量子位及其基本操作,主要是用一
个函数来表示量子位的态以及怎样读出一个量子位的态。
QuReg块它定义了量子寄存器的比特数和一些基本的赋
值和读出操作。
实际上,这些操作都是针对复数进行的,由于复数的运算并
不是很复杂,所以实现上面那些块的功能并不是非常困难的。
GetQ()函数我们必须建立一个足够大的量子寄存器来保
存0到q一1所有整数的叠加,在这里,q是2的幂,且n <=q
<2f2。
M~lexp()函数这个函数在输入为x,a和11时,返回x a
rl州11的值。
RegSize()函数这个输入整数a,将返回a在二进制状态下
的bit数。
Max()函数在两个输入的整数中,返回大的那一个。
GCD函数这个函数计算两个整数的最大公约数。由于一
个数模0是没有定义的,所以在这个函数中返回一1当作一个
错误信息来表示我们正在尝试着用某个数模0。
DFr()函数这个函数是对寄存器中的0一>q一1个入口进
行离散傅立叶变换。
[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法