因为我们将处理一些大整数,所以需要调整一下如何看待输人规模和基本算术运算的代价的看法。
在本章中,一个“大的输入”意味着输入包含“大的整数”,而不是输人中包含“许多整数”。因此,我们将根据输入数的位数来衡最输人的规模,而不是仅根据输人中包含的整数的个数。在本章中,我们在分析算法时一般既考虑算术运算的次数,也考虑它们所要求的位操作的次数。
一:初等数论概念
一个整数能被另一个整数整除的概念是数论中的一个中心概念。记号d|a,读作“d整除a”,意味着对某个整数k,有a=kd。比如3整除6,则6=2*3(3是除数,6是被除数)。0可被任何整数整除。
如果a>0且d|a,则|d|<=|a|。
如果d|a并且d>=0,则d是a的约数,a是d的倍数。d|a当且仅当(-d)|a,因此一般定义约数为非负整数。一个整数a的约数最小为1,最大为|a|。每个整数a都可以被其平凡约数1和a整除,a的非平凡约数也成为a的因子,比如20的因子有2,4,5和10.
对于某个整数a>1,如果它仅有平凡约数1和a,则称a为素数(质数)。如果a>1且a不是素数,则a为合数。1不是素数,也不是合数,同样,0和所有非负数既不是素数,也不是合数。
已知一个整数n,所有整数都可以根据它们除以n所得的余数来进行分类,数论的大部分理论都是基于上述划分的。
对任意整数a和任意正整数n,存在唯一的整数q和r,满足0<=r<n,并且a=qn+r。q为商,r=a mod n称为余数。n|a当且仅当a mod n = 0.
根据整数模n所得的余数,可以把整数分成n个等价类。记为,
= {a+kn:k ∈ Z},