整数和数论中的函数
| Mod[k,n] | k 模 n ( k 除以 n 的余数) |
| Quotient[m,n] | m 和 n 的商 ( 的整数部分) |
| QuotientRemainder[m,n] | 商和余数的列表 |
| Divisible[m,n] | 检测 m 是否被 n 整除 |
| CoprimeQ[n1,n2,...] | 检测 是否成对互质 |
| GCD[n1,n2,...] | , , ... 的最大公约数 |
| LCM[n1,n2,...] | , , ... 的最小公倍数 |
| KroneckerDelta[n1,n2,...] | 如果所有的 都相等,那么 Kronecker delta 等于1,否则,等于 0 |
| IntegerDigits[n,b] | b 进制下 n 的位数 |
| IntegerExponent[n,b] | 整除 n 的 b 次幂的最大值 |
一些整数函数.
| Out[1]= |  |
| Out[2]= |  |
| Out[3]= |  |
由
Mod 得到的结果,其符号与第二个自变量的符号相同.
| Out[4]= |  |
对于任意整数
a 和
b,
b*Quotient[a, b]+Mod[a, b] 等于

总是成立的.
| Mod[k,n] | 结果在 0 到 之间 |
| Mod[k,n,1] | 结果在 1 到 n 之间 |
| Mod[k,n,-n/2] | 结果在 到 之间 |
| Mod[k,n,d] | 结果在 d 到 之间 |
带偏心距的整数余数.
特别当使用
Mod 来获得部分对象的索引时,指定一个偏心距常常是方便的.
在对列表循环处理下,提取列表的第 18

个元素.
| Out[5]= |  |
最大公约数函数
GCD
给出整除所有

的最大整数. 当输入两个整数的比时,
Mathematica 使用
GCD 约去公因式,并给出最简有理数.
最小公倍数函数
LCM
给出包含每个

的所有因子的最小整数.
| Out[6]= |  |
Kronecker delta 函数
KroneckerDelta
当

全相等时等于1,否则等于0.

可以看作为一个全对称的张量.
| Out[7]= |  |
整数因子分解和相关函数.
给出 24 的所有因子为

,

. 每个子列表的第一个元素是因子;第二个元素是其指数.
| Out[8]= |  |
| Out[9]= |  |
应该认识到,按照现代数学的观点,整数因子分解是本质上困难的计算问题. 因此,用户能容易地输入一个整数,而
Mathematica 对其分解因子可能要花费天文数字长度的时间. 只要用户给出的整数位数小于50,
FactorInteger 将不会有任何困难. 然而,在一些特殊情况下,它能处理长得多的整数.
| Out[10]= |  |
Mathematica c能容易地分解这个特殊整数.
| Out[11]= |  |
尽管
Mathematica 可能分解不了大整数,但是它常常能检测该整数是否为素数. 此外,
Mathematica 有一个寻找第

个素数的快速方法.
| Out[12]= |  |
| Out[13]= |  |
| Out[14]= |  |
尤其,在数论中,知道素数的分布比知道它们的值常常更加重要. 函数
PrimePi[x] 给出小于或者等于

的素数个数

.
| Out[15]= |  |
| Out[16]= |  |
| Out[17]= |  |
Liouville 函数给出

,其中

是计算重数(multiplicity)的素因子数目.
| Out[18]= |  |
该曼戈尔特函数(Mangoldt function)返回以素数幂为基的对数,或者当合成的时候,返回零.
| Out[19]= |  |
默认情况下,
FactorInteger 只允许实整数. 但通过设置选项
GaussianIntegers->True,它也能处理高斯整数——实部和虚部均为整数的复数. 正如它能唯一地分解出实素数一样,它也能唯一地分解出高斯素数. 然而,在高斯素数的选择中有一些潜在的二义性. 在
Mathematica 中,除了初始的

和

以外,因子总是被选为正实部和非负虚部.
在高斯整数上,2能分解为

.
| Out[20]= |  |
| Out[21]= |  |
| PowerMod[a,b,n] | 模 n |
| DirichletCharacter[k,j,n] | 狄雷克莱特征  |
| EulerPhi[n] | 欧拉 totient 函数  |
| MoebiusMu[n] | 莫比乌斯函数  |
| DivisorSigma[k,n] | 除数函数  |
| DivisorSum[n,form] | 对于所有整除 n 的 i, 的和 |
| DivisorSum[n,form,cond] | 仅包含对 给出 True 的约数的和 |
| JacobiSymbol[n,m] | 雅可比符号  |
| ExtendedGCD[n1,n2,...] | , , ... 的扩展最大公约数 |
| MultiplicativeOrder[k,n] | k 模 n 的多重阶 |
| MultiplicativeOrder[k,n,{r1,r2,...}] | 带有余数 的广义多重阶 |
| CarmichaelLambda[n] | 卡米切尔函数  |
| PrimitiveRoot[n] | n 的一个原根 |
数论中的一些函数.
模幂函数
PowerMod
给出与
Mod
当
b>0 时的相同的结果. 但是,
PowerMod 更有效,因为它避免生成

的完全形式.
用户可以使用
PowerMod 不仅能求出正模幂,也能求出模逆. 对于负数
b,
PowerMod
给出,如果可能的话,一个整数

使得

. (当这样的整数存在时,它是唯一的模
n). 如果不存在这样的整数

,
Mathematica 就使得
PowerMod 不再计算.
| Out[22]= |  |
| Out[23]= |  |
| Out[24]= |  |
这里寻找最小非负整数

使得

等于 3 模 11.
| Out[25]= |  |
| Out[26]= |  |
| Out[27]= |  |
| Out[28]= |  |
| Out[29]= |  |
| Out[30]= |  |
| Out[31]= |  |
| Out[32]= |  |
对于给定的模
k,具有

个不同的狄利克雷(Dirichlet)特征,以索引
j 作为标签. 不同的约定可以对可能的特征给出不同的排序.
| Out[33]= |  |
当欧拉 totient 函数

给出小于

且与

互素的正整数的个数. 一个重要的关系(费马小定理)是对与

互素的所有

有

.
莫比乌斯函数

被定义为:当

为

个不同素数的积时,等于

,当

包含素数的平方(不为1)时,等于

. 一个重要的关系是莫比乌斯逆公式,即如果

对所有

成立,那么

,其中和式是对所有整除

的正整数

求积.
除数函数

是

的所有约数的


次幂的和. 函数

给出

的约数的总数,并常常表示为

、

和

. 函数

等于

的所有约数的和,常常表示为

.
对于素数

,

.
| Out[34]= |  |
| Out[35]= |  |
| Out[36]= |  |

给出24的不同约数的总数.
| Out[37]= |  |
函数
DivisorSum
表示

的和,对于所有的除以
n 的
i.
DivisorSum
仅包含对于

给出
True 的约数.
| Out[38]= |  |
| Out[39]= |  |
雅可比符号
JacobiSymbol
当

为奇数时,归结为勒让德符号

. 勒让德符号是:当

被

整除时,其值为零;否则,当

是二次余数(模素数

)其值为

,若不然其值为

. 一个与

互素的整数

称为二次余数(模

) 是指存在一个整数

使得

. 完全雅可比符号是所有满足

的素因子

的勒让德符号

的连乘.
扩展 GCD
ExtendedGCD
给出一个列表

,其中

是

的最大公约数,

是满足

的整数. 扩展 GCD 在求线性丢番图方程的整数解中是重要的.
列表中的第一个数是 105 和 196 的最大公约数.
| Out[40]= |  |
第二个数对满足

.
| Out[41]= |  |
多重阶函数
MultiplicativeOrder
给出使

的最小整数

. 那么

被称为

模

的指标. 表示法

偶尔被使用.
广义多重阶函数
MultiplicativeOrder
给出使

对某个

成立的最小整数

.
MultiplicativeOrder
有时称作

模

的次阶函数,记为

.
MultiplicativeOrder
有时被称为关于基

模

的

的离散对数.
卡米切尔函数或最小通用指数

给出使

对所有的与

互素的整数

都成立的最小整数

.
连续分式.
这里生成

的连续分式表示的前10项.
| Out[42]= |  |
| Out[43]= |  |
结果接近

.
| Out[44]= |  |
这里直接给出

的有理近似.
| Out[45]= |  |
连续分式 出现在许多数论的设置中,有理数有最终连续的分式表示. 二次的无理数有重复的连续分式表示.
数的完全表示.

的连续分式表示从第八项开始,然后涉及永远重复的项的序列.
| Out[46]= |  |
这里从其连续分式表示中重构

.
| Out[47]= |  |
| Out[48]= |  |
| Out[49]= |  |
| Out[50]= |  |
收敛连分数 经常用来使用有理数逼近无理数. 这些近似数从上方和下方交替,并且在项数上呈指数收敛. 此外,一个简单的连分数的收敛

比任何其它具有小于或者等于

的分母的有理数逼近更好.
收敛连分数.
这里给出 101/9801 的有理数逼近列表,从它的连分式展开式导出.
| Out[51]= |  |
| Out[52]= |  |
这里列出

的连续有理逼近,直到用尽数值精度.
| Out[53]= |  |
| Out[54]= |  |
整数格的函数.
格简化函数
LatticeReduce
被使用在多种现代算术中. 基本思想是把整数向量

看作定义一个数学上的
格. 表示格中一个点的任意向量可以被写为形如

的线性组合,其中

是整数. 对于一个特定的格,存在对"基向量"

的许多可能的选择.
LatticeReduce 所做的是找出对于该格的具有某种特殊性质的化简的基向量

的集合.
| Out[55]= |  |
这里给出在由三个向量指定的四维空间中的一个格的简化基.
| Out[56]= |  |
注意,在上一个例子中,
LatticeReduce 把几乎平行的向量用更正交的向量取代. 在这个过程中,求出相当短的基向量.
对于矩阵

,
HermiteDecomposition 给出矩阵

和

使得

是幺模,

,并且

为简化行阶梯矩阵. 相对于
RowReduce,枢轴(pivots)可能大于1,因为在整数环上没有分数. 枢轴(pivot)上的项通过减去枢轴同行的所有元素(pivot row)的适当的倍数来最小化.
在这种情况下,恢复原有的矩阵,因为它的连续梯队的形式.
| Out[57]= |  |
| Out[58]= |  |
这里,第二个矩阵具有一些大于1的枢轴(pivot),以及枢轴上的非零项.
| Out[59]= |  |
位计数函数.
| Out[60]= |  |
| Out[61]= |  |
| Out[62]= |  |
| BitAnd[n1,n2,...] | 整数 的位与 |
| BitOr[n1,n2,...] | 整数 的位或 |
| BitXor[n1,n2,...] | 整数 的位异或 |
| BitNot[n] | 整数 n 的位非 |
| BitLength[n] | 整数 n 中的二进制位数 |
| BitSet[n,k] | 在整数 n 中,设置位 k 为1 |
| BitGet[n,k] | 从整数 n 中获取位 k |
| BitClear[n,k] | 在整数 n 中,设置位 k 为0 |
| BitShiftLeft[n,k] | 向左移动整数 n,移动量为 k 位,并使用零填充 |
| BitShiftRight[n,k] | 向右移动,并且去掉最后 k 位 |
位运算.
位运算作用于表示为二进制的整数.
BitAnd
产生一个整数其二进制表示的某一位为1当且仅当所有的

在该位为1.
BitOr
产生一个整数其二进制表示的某一位为1,只要某个

在该位为1.
BitXor
产生一个整数,其二进制表示的某一位为1,当且仅当

或者

中仅有一个在该位为1.
BitXor
的二进制表示的某一位为1,当且仅当

中有奇数个在该位为1.
Out[63]//BaseForm= |
| |  |
位运算使用在各种组合算术中. 它们也常常用于低级计算机语言中操纵位域. 然而,在这些语言中,整数有受限制的位数,典型的是8的倍数. 在
Mathematica 中的位运算实际上允许整数有不受限制的序列. 这使得
BitNot[n] 简单地等于

.
测试平方因子.
SquareFreeQ[n] 检查
n 是否具有平方素数因子. 这通过计算
MoebiusMu[n] 并且查看结果是否为0来实现;如果是,那么
n 包括平方素数因子,否则就不包括. 计算
MoebiusMu[n] 涉及寻找
n 的最小素数因子
q. 如果
n 是一个小的素数因子(小于或者等于

),这是很快的. 否则,用
FactorInteger 来寻找
q.
| Out[64]= |  |
| Out[65]= |  |
| Out[66]= |  |
寻找素数.
NextPrime[n] 寻找最小的素数
p 使得

. 对于少于20位的
n,该算法对大于
n 的奇数,使用
PrimeQ 进行直接搜索. 对于超过20位的
n,该算法构建一个"小筛子",并且首先检查候选素数是否可以在使用
PrimeQ 前被一个小素数整除. 这似乎比直接搜索速度更快一些.
| Out[67]= |  |
| Out[68]= |  |
| Out[69]= |  |
对于
RandomPrime
和
RandomPrime[max],如果
max 是小的,则通过从素数查找表中随机选择,获取一个随机素数
p;如果
max 是大的,则通过在整数中随机搜索整数获取该随机素数. 如果在指定范围内不存在素数,则返回未计算的输入,并显示一个错误信息.
| Out[70]= |  |
测试是否包含素数幂.
PrimePowerQ 的算法首先计算
n 的最小素因子
p ,并且尝试除以
n 直到或者当
n 是一个素数幂的时候,得到1,或者当
n 不是一个素数幂的时候尝试除以
n 直到不可以再进行除法运算的时候.
| Out[71]= |  |
| Out[72]= |  |
求解联立全等.
中国剩余定理规定,一定类型的联立全等问题总是有一个解.
ChineseRemainder
寻找最小非负整数
r 使得
Mod
是

. 该解是唯一的

的元素的最小公倍数的模.
| Out[73]= |  |
| Out[74]= |  |
| Out[75]= |  |
计算原根.
PrimitiveRoot[n]返回一个生成器,该生成器生成与
n 在模

相乘互素的数形成的集合. 这里具有一个生成器,当且仅当
n 是 2、4、一个奇素数的幂、或者一个奇素数的幂的两倍. 如果
n 是一个素数或者素数幂,将返回最小正原根.
| Out[76]= |  |
| Out[77]= |  |
| Out[78]= |  |
| Out[79]= |  |
如果该变量是复合的,并且不是素数幂或者素数幂的两倍,该函数不进行计算.
| Out[80]= |  |
把一个整数表示为平方和或者其它幂的和.
| Out[81]= |  |