FiniteField[p,d]
给出有
个元素的有限域.
FiniteField[p,f]
给出有限域
,其中
是
中的不可约多项式.
FiniteField[p,…,rep]
使用域元素表示法 rep,可以是 "Polynomial" 或者 "Exponential".
FiniteField
FiniteField[p,d]
给出有
个元素的有限域.
FiniteField[p,f]
给出有限域
,其中
是
中的不可约多项式.
FiniteField[p,…,rep]
使用域元素表示法 rep,可以是 "Polynomial" 或者 "Exponential".
更多信息
- 有限域也称为伽罗瓦域.
- 有限域用于代数计算、纠错码、密码学、组合数学、代数几何、数论和有限几何等.
- 域
是具有所有四则算术运算(+,-,* 和 ÷)的代数系统. 对于某些质数
和正整数
,有限域
可以有
个元素
. - 第
个元素
是加法单位元,对于所有
,
均成立,而第
个元素
是乘法单位元,对于所有
,
均成立. - FiniteFieldElement[,k] 或 [k] 可用于得到第
个元素
,并且格式为
.
- 在同一域中的 FiniteFieldElement 对象通过算术运算自动合并.
- 多项式运算,如 PolynomialGCD、Factor、Expand、PolynomialQuotientRemainder 和 Resultant 等,可用于具有有限域系数的多项式. Together 和 Cancel 可用于具有有限域系数的有理函数.
- 线性代数运算,如 Det、Inverse、RowReduce、NullSpace、MatrixRank 和 LinearSolve 等,可用于具有有限域元素的矩阵.
- Solve 和 Reduce 可用于求解有限域上的方程组.
- FiniteField 支持两种不同的表示法 rep:"Polynomial" 和 "Exponential".
- "Polynomial" 表示法类似于复数
的笛卡尔表示,易于进行加减,但进行乘除则略有难度. - 表示法:它使用 d 次不可约多项式
来识别具有商:
的域.
用多项式
表示. 或者也可以把它当作基为
的向量
. - 枚举: 元素按逆字典顺序枚举:
,
,…,
,…,
- 运算:令
且
;则有:
及 
- 且
以
为模(PolynomialRemainder)降低到
次.
且
.
,乘法逆
是使用扩展多项式 GCD 计算的. 由于
不可约,有
,因此从扩展多项式 GCD,对于某些多项式
和
,有
. 通过降低模
,得到
,因此有
. - "Exponential" 表示法类似于复数
的极坐标表示,易于进行乘除,但进行加减则略有难度. - 表示法:正如在 "Polynomial" 表示法中,它使用次数为 d 的不可约多项式
,但在这种情况下,
也需要是原函数. 由于
为原函数,
的幂表示
中除了
以外的每个元素: -
- 该表示法也称为循环群表示法,因为
是一个乘法循环群. - 枚举:使用幂次序枚举元素:
,
,
, …,
, …, 
- 运算:令
和
,则得到:
和 
- 并且有倒数关系
. 对于加法和减法,没有简单规则能够给出
,使得
,因此它存储在查找表中,该表在域大小
中是线性的. 这使得运算更快,但以存储数据为代价. 这也意味着 "Exponential" 表示法不适用于大型域. - 表示法之间的实际区别是:
- "Polynomial"不需要花时间来创建,不使用额外的内存,适用于大型域,但运算速度稍慢.
- "Exponential" 需要一些时间来创建,使用与域大小成比例的额外内存,适用于小型域但运算速度稍快.
- Information[FiniteField[…], prop] 给出有限域的属性 prop. 可以指定以下属性:
-
"Characteristic" 有限域的特征 p "ExtensionDegree" 有限域在
上的扩张度 d"FieldSize" 域的元素个数 q=pd "FieldIrreducible" 用于构造域的多项式函数 f "ElementRepresentation" "Polynomial" 或 "Exponential"
范例
打开所有单元 关闭所有单元基本范例 (2)
ℱ = FiniteField[5, 1]{ℱ[3] + ℱ[4], ℱ[2] ℱ[4]}Factor[2x ^ 2 + 3x + 1, Extension -> ℱ]ℱ = FiniteField[17, 3]{a, b} = {ℱ[{1, 2, 3}], ℱ[123]}(a ^ 2 + 2b) / (5a b - 7)PolynomialRemainder[x ^ 5 - 1, a x ^ 3 + b x + a b, x]范围 (16)
表示和属性 (4)
ℱ = FiniteField[1009, 3]Information[ℱ, "FieldIrreducible"]Information[ℱ, "ElementRepresentation"]Information[ℱ, {"Characteristic", "ExtensionDegree", "FieldSize"}]ℱ[123] - ℱ[123]ℱ[345] / ℱ[345]f = 2# ^ 4 + 57# ^ 3 + 43 # ^ 2 + 17# - 500&;IrreduciblePolynomialQ[f[x], Modulus -> 509]ℱ = FiniteField[509, f, "Polynomial"]PolynomialMod[Information[ℱ, "FieldIrreducible"][x] - f[x], 509]ℱ = FiniteField[7, 3, "Exponential"]PrimitivePolynomialQ[Information[ℱ, "FieldIrreducible"][x], 7]ℱ[21] - ℱ[21]ℱ[32] / ℱ[32]q = Information[ℱ, "FieldSize"]θ = ℱ[2]And@@Table[ℱ[ind] == θ ^ (ind - 1), {ind, q - 1}]FiniteField[11]% === FiniteField[11, 1]FiniteField[49]% === FiniteField[7, 2]算术 (3)
ℱ = FiniteField[3, 6];
{a, b} = {ℱ[123], ℱ[432]}{a + b, a - b, a b, a / b, a ^ 321}{a ^ (1 / 3), Sqrt[a]}Sqrt[b]ℱ = FiniteField[19, 3];
a = ℱ[123]{a + 5, 7a}a + 7 / 8a + 2 / 19用 Element 决定哪些有理数可以用域元素标识:
{Element[7 / 8, ℱ], Element[2 / 19, ℱ]}ℱ[0] == 0ℱ[1] == 1ℱ = FiniteField[389, 2];
𝒢 = FiniteField[389, 4];ℱ[123] - 𝒢[123]ℋ = FiniteField[389, Information[ℱ, "FieldIrreducible"], "Exponential"];ℱ[123] - ℋ[123]自同构和嵌入 (2)
ℱ = FiniteField[7, 5];
a = ℱ[123]conj = Table[FrobeniusAutomorphism[a, i], {i, 0, 4}]f = MinimalPolynomial[a]f /@ conjFrobeniusAutomorphism[a] == a ^ 7𝒦 = FiniteField[29, 3];
ℱ = FiniteField[29, 6];
emb = FiniteFieldEmbedding[𝒦, ℱ]emb[𝒦[123]]{a, b} = {𝒦[345], 𝒦[678]};emb[a + b] == emb[a] + emb[b]emb[a b] == emb[a]emb[b]有限域上的多项式 (2)
ℱ = FiniteField[11, 3];
f = ℱ[1]x ^ 2 + ℱ[2]x + ℱ[3];
g = ℱ[12]x ^ 5 + ℱ[21]x + ℱ[33];
h = ℱ[321]x ^ 3 + ℱ[27]x ^ 2 + ℱ[53]x + ℱ[19];fg = Expand[f g]gh = Expand[g h]gcd = PolynomialGCD[fg, gh]Cancel[gcd / g]{q, r} = PolynomialQuotientRemainder[g, h, x]Expand[g - q h - r]Factor[h]Resultant[f, g, x]Expand[(f y + g z)(h z + 1)]Factor[%]Discriminant[f y ^ 2 + g y + h, y]ℱ = FiniteField[29, 3];
f = ℱ[12]x ^ 2 + ℱ[34]x + ℱ[56];Factor[f]𝒢 = FiniteField[29, 6];
ℰ = FiniteFieldEmbedding[ℱ, 𝒢];Factor[f, Extension -> ℰ]有限域上的线性代数 (4)
a = (| | | |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {12}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {23}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {5, 1}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {16, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {27, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {9, 2}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {20, 2}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {2, 3}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {3, 3}] |);b = (| | |
| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {7, 4}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {2, 8}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {26, 11}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {21, 15}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {16, 19}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {11, 23}] |);
a.b//MatrixFormMatrixPower[a, 123456789]//MatrixForma = (| | | |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {12}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {23}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {5, 1}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {16, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {27, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {9, 2}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {20, 2}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {2, 3}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {3, 3}] |);
Det[a]Inverse[a]//MatrixForm%.a//MatrixFormCharacteristicPolynomial[a, x]CoefficientList[%, x].(MatrixPower[a, #]& /@ Range[0, 3])//MatrixFormc = (| | | | |
| -------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {16, 13, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {25, 22, 2}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {5, 3, 4}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {14, 12, 5}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {23, 21, 6}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {3, 2, 8}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {2, 11, 9}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {27, 16, 10}] |);MatrixRank[c]NullSpace[c]//MatrixFormc.Transpose[%]//MatrixFormRowReduce[c]//MatrixForma = (| | | |
| ---------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {12}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {23}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {5, 1}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {16, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {27, 1}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {9, 2}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {20, 2}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {2, 3}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {3, 3}] |);b = (| | |
| ----------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {7, 4}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {2, 8}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {26, 11}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {21, 15}] |
| FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {16, 19}] | FiniteFieldElement[FiniteField[29, 2 + 15*#1 + 2*#1^2 + #1^4 & , "Polynomial"], {11, 23}] |);
(x = LinearSolve[a, b])//MatrixForma.x === b{l, u, p, cn} = LUDecomposition[a]l.u === p.ax == LinearSolve[u, LinearSolve[l, p.b]]有限域上的方程 (1)
ℱ = FiniteField[7, 5];Solve[x ^ 5 + ℱ[123]x == ℱ[127], x]Reduce[x ^ 9 + 5 x + 3 == 0, x, ℱ]Solve[ℱ[123]x + ℱ[234]y == ℱ[345] && ℱ[321]x + ℱ[432]y == ℱ[543], {x, y}]Reduce[ℱ[1234]x + ℱ[2345]y + ℱ[3456]z == ℱ[4567] && ℱ[1]x + ℱ[2]y + ℱ[3]z == ℱ[4], {x, y, z}]Solve[x ^ 2 + y ^ 2 == 3 && x ^ 5 + y ^ 5 == 5, {x, y}, ℱ]Reduce[ℱ[123]x ^ 2 + ℱ[234]y ^ 3 + ℱ[345]z ^ 4 == ℱ[456] && ℱ[21]x + ℱ[32]y ^ 2 + ℱ[43]z ^ 3 == ℱ[54] && x y z == ℱ[1], {x, y, z}]FindInstance[x ^ 2 + y ^ 2 + z ^ 2 == 21, {x, y, z}, ℱ]FindInstance[ℱ[321]x ^ 3 + ℱ[432]y ^ 3 + ℱ[543]z ^ 3 == ℱ[654] && x ^ 2 == ℱ[333]y z + ℱ[111], {x, y, z}, 3]Resolve[Exists[z, ℱ[111]x + ℱ[222]y + ℱ[333]z == ℱ[444] && ℱ[555]x + ℱ[666]y + ℱ[777]z == ℱ[888]]]𝒦 = FiniteField[2, 5];Resolve[Exists[{y, z}, 𝒦[1]x ^ 2 + 𝒦[2]y ^ 3 + 𝒦[3]z ^ 4 == 𝒦[4] && 𝒦[5]x ^ 4 + 𝒦[6]y ^ 3 + 𝒦[7]z ^ 2 == 𝒦[8] && x y z != 𝒦[0]]]应用 (8)
执行纠错码.
汉明码将
位消息编码为
位序列,并且最多可以纠正一个错误:
m = 5;
n = 2 ^ m - 1;
k = n - m;令
为使用指数元素表示法的具有
个元素的有限域,令
是用于构造
的不可约多项式,令
为
的生成器:
ℱ = FiniteField[2, m, "Exponential"];
f = Information[ℱ, "FieldIrreducible"][x];
θ = ℱ[{0, 1}]encode[kbits_] := PadRight[Mod[CoefficientList[f(kbits.x ^ Range[0, k - 1]), x], 2], n]msg = Table[RandomInteger[], {k}]enc = encode[msg]t[nbits_, x_] := nbits.x ^ Range[0, n - 1]t[enc, θ]err = ReplaceAt[enc, e_ :> 1 - e, RandomInteger[{1, n}]]t[err, θ]correct[nbits_] :=
With[{ep = t[nbits, θ]},
If[ep == 0,
nbits,
ReplaceAt[nbits, e_ :> 1 - e, ep["Index"]]]]correct[err] === encdecode[nbits_] := PadRight[CoefficientList[PolynomialQuotient[nbits.x ^ Range[0, n - 1], f, x, Modulus -> 2], x], k]当接收到的消息没有错误或有一个错误时,解码后的消息是正确的:
decode[correct[enc]] === msgdecode[correct[err]] === msg为任意质数幂
构造
个正交的
阶拉丁方阵.
阶拉丁方阵是一个
数组,其中每一行和每一列都包含恰好
个元素中的每个元素一次. 如果通过并置两个数组形成的
个数对都不同,则称这对拉丁方阵是正交的:
q = 9;
ℱ = FiniteField[3, 2];
squares = Table[Table[(ℱ[k]ℱ[i - 1] + ℱ[j - 1])["Index"] + 1, {i, q}, {j, q}], {k, q - 1}];
MatrixForm /@ squareslatinQ[a_] := Union[Sort /@ Join[a, Transpose[a]]] === {Range[q]}latinQ /@ squaresorthogonalQ[a_, b_] := Length[Union[Transpose[{Flatten[a], Flatten[b]}]]] == q ^ 2orthogonalQ@@@Subsets[squares, {2}]如果
时,和
都是不同的,那么一个有限的整数集合
是一个西顿(Sidon)集合. 对于质幂
,在
中构造一个
个整数的西顿集合:
sidon[q_] :=
Module[{ff, g},
ff = FiniteField[q ^ 2, "Exponential"];
g = ff[2];Prepend[Select[Range[q ^ 2 - 1], Mod[(g ^ # - g)["Index"] - 1, q + 1] == 0&], 1]]q = 27;
a = sidon[q]Length[a] == qsums = Join@@Table[a[[i]] + a[[j]], {j, q}, {i, j}];Length[sums] == Length[Union[sums]] == q(q + 1) / 2对于有
个字母的字母表,阶
的 de Bruijn 序列是字母表中
个字母的循环序列
,使得
个字母的每个序列作为
的子序列恰好出现一次. 为一个有
个字母的字母表构造一个阶数为
的 de Bruijn 序列,取质幂
:
deBruijn[q_, n_] :=
Module[{f1, f2, emb, s, p},
f1 = FiniteField[q, "Exponential"];
f2 = FiniteField[q ^ n, "Exponential"];
emb = FiniteFieldEmbedding[f1, f2];
s = FiniteFieldIndex[emb["Projection"][FromFiniteFieldIndex[Range[q ^ n - 1], f2]]];
p = SequencePosition[s, Table[0, {n - 1}]][[1, 1]];
Insert[s, 0, p]]q = 8;n = 3;
s = deBruijn[q, n]验证对于一个有
个字母的字母表,
是阶数为
的 de Bruijn 序列:
Sort[Partition[s, n, 1, 1]] === Tuples[Range[0, q - 1], n]如果
的所有项为
或
且
,则
矩阵
是哈达玛(Hadamard)矩阵. 为任意素幂
构建一个阶数为
的哈达玛矩阵,其中
:
ξ[e_] := If[Head[Sqrt[e]] === FiniteFieldElement, 1, -1]
h[0, _, _] := 1
h[_, 0, _] := 1
h[i_, j_, ff_] := If[i == j, -1, ξ[ff[j - 1] - ff[i - 1]]]q = 7 ^ 3;
ℱ = FiniteField[7, 3];
(H = Table[h[i, j, ℱ], {i, 0, q}, {j, 0, q}])//MatrixPlotUnion[Flatten[H]]H.Transpose[H] === (q + 1)IdentityMatrix[q + 1]实现高级加密标准(AES)算法中使用的 Rijndael S 盒步骤. 第一部分称为 Nyberg S 盒,使用
中的乘法逆:
F256 = FiniteField[2, # ^ 8 + # ^ 4 + # ^ 3 + # + 1&]NybergSbox[byte_] := Piecewise[{{(F256[byte] ^ (-1))["Index"], byte != 0}}, 0]F2 = FiniteField[2];
a = Map[F2, {{1, 0, 0, 0, 1, 1, 1, 1}, {1, 1, 0, 0, 0, 1, 1, 1}, {1, 1, 1, 0, 0, 0, 1, 1}, {1, 1, 1, 1, 0, 0, 0, 1}, {1, 1, 1, 1, 1, 0, 0, 0}, {0, 1, 1, 1, 1, 1, 0, 0}, {0, 0, 1, 1, 1, 1, 1, 0}, {0, 0, 0, 1, 1, 1, 1, 1}}, {2}];
b = F2 /@ {1, 1, 0, 0, 0, 1, 1, 0};
affine[byte_] := FromDigits[Reverse[FiniteFieldIndex[a.Reverse[IntegerDigits[byte, 2, 8]] + b]], 2]ForwardSbox[byte_] := affine[NybergSbox[byte]]tohex[byte_] := StringJoin@@(FromCharacterCode[If[# <= 9, # + 48, # + 87]]& /@ IntegerDigits[byte, 16, 2])Table[tohex[ForwardSbox[16i + j]], {i, 0, 15}, {j, 0, 15}]//MatrixFormainv = Inverse[a];
affineinv[byte_] := FromDigits[Reverse[FiniteFieldIndex[ainv.(Reverse[IntegerDigits[byte, 2, 8]] - b)]], 2]InverseSbox[byte_] := NybergSbox[affineinv[byte]]Table[tohex[InverseSbox[16i + j]], {i, 0, 15}, {j, 0, 15}]//MatrixForm(InverseSbox /@ ForwardSbox /@ Range[0, 255]) === Range[0, 255]使用 2049 位素数实现 Diffie–Hellman 公钥密码系统:
p = 32317006071311007300714876688669951960444102669715484032130345427524655138867890893197201411522913463688717960921898019494119559150490921095088152386448283120630877367300996091750197750389652106796057638384067568276792218642619756161838094338476170470581645852036305042887575891541065808607552399123930385521914333389668342420684974786564569494856176035326322058077805659331026192708460314150258592864177116725943603718461857357598351152301645904403697613233287231227125684710820209725157101726931323469678542580656697935045997268352998638215525166389437335543602135433229604645318478604952148193555853611059596248443;
ℱ = FiniteField[p];g = ℱ[PrimitiveRoot[p]]SeedRandom[1234];a = RandomInteger[{2, p - 2}]g1 = g ^ ab = RandomInteger[{2, p - 2}]m = RandomInteger[{1, 2 ^ 2048}]e = m g1 ^ bg2 = g ^ bd = e / g2 ^ ad["Index"] == mp = 179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224143009;
Zp = FiniteField[p];
g = Zp[PrimitiveRoot[p]]SeedRandom[1234];
h = RandomInteger[{2, p - 1}];
c = g ^ h信息
的签名是一对
小于
并使得
的正整数. 计算签名需要知道秘密整数
:
signature[m_] :=
Module[{k, a, b, d, r, s},
k = 2;
While[GCD[k, p - 1] != 1, k++];
{d, {a, b}} = ExtendedGCD[k, p - 1];
r = (g ^ k)["Index"];
s = Mod[a(m - h r), p - 1];
{r, s}]verify[{r_, s_}, m_] := g ^ m == c ^ r Zp[r] ^ sm = RandomInteger[{1, p - 1}];
{r, s} = signature[m]verify[{r, s}, m]属性和关系 (7)
ℱ = FiniteField[7, 10]Information[ℱ, "FieldSize"] == 7 ^ 10ℱ = FiniteField[11, 3];
{a, b} = {ℱ[123], ℱ[456]}{(a + b) ^ 11, a ^ 11 + b ^ 11}因此映射
是一个域自同构,称为 FrobeniusAutomorphism:
FrobeniusAutomorphism[a] == a ^ 11ℱ = FiniteField[109, 5];
θ = ℱ[{0, 1}]f = Information[ℱ, "FieldIrreducible"]f[θ]使用 FrobeniusAutomorphism 求
的剩余根:
Table[FrobeniusAutomorphism[θ, k], {k, 4}]f /@ %ℱ = FiniteField[3, 5];
q = Information[ℱ, "FieldSize"]Union[x ^ q - x /. Table[{x -> ℱ[i]}, {i, 0, q - 1}]]Expand[Product[x - ℱ[i], {i, 0, q - 1}]]Coefficient[%, x, 1] == -1ℱ = FiniteField[73, 6];
f = 9x ^ 6 + 54x ^ 2 + 42x + 11使用 IrreduciblePolynomialQ 与 Modulusp 验证在
上的不可约性:
IrreduciblePolynomialQ[f, Modulus -> 73]使用 Factor 与 Extensionℱ 验证 f 是线性因子在 ℱ 上的乘积:
Factor[f, Extension -> ℱ]使用 FiniteField[p,1] 在质数域
上计算:
ℱ = FiniteField[19, 1];ℱ[12] ℱ[7] + ℱ[3]与使用 Mod 获得的结果进行比较:
Mod[12 7 + 3, 19]Discriminant[ℱ[4]x ^ 3 + ℱ[5]a x + ℱ[11], x]与使用 Modulus 选项获得的结果进行比较:
Discriminant[4x ^ 3 + 5a x + 11, x, Modulus -> 19]使用 ToFiniteField 将整数系数转换为有限域质子域中的元素:
ℱ = FiniteField[29, 3];
ToFiniteField[123 + 456x + 789x ^ 2 + x ^ 3, ℱ]FromFiniteField 将系数转换回整数:
FromFiniteField[%, ℱ]ToFiniteField[(t ^ 2 + 3t + 11)x + (21t + 12)y + 3t ^ 2 - 11, ℱ, t]FromFiniteField[%, ℱ, t]文本
Wolfram Research (2023),FiniteField,Wolfram 语言函数,https://reference.wolfram.com/language/ref/FiniteField.html (更新于 2024 年).
CMS
Wolfram 语言. 2023. "FiniteField." Wolfram 语言与系统参考资料中心. Wolfram Research. 最新版本 2024. https://reference.wolfram.com/language/ref/FiniteField.html.
APA
Wolfram 语言. (2023). FiniteField. Wolfram 语言与系统参考资料中心. 追溯自 https://reference.wolfram.com/language/ref/FiniteField.html 年
BibTeX
@misc{reference.wolfram_2026_finitefield, author="Wolfram Research", title="{FiniteField}", year="2024", howpublished="\url{https://reference.wolfram.com/language/ref/FiniteField.html}", note=[Accessed: 31-October-2026]}
BibLaTeX
@online{reference.wolfram_2026_finitefield, organization={Wolfram Research}, title={FiniteField}, year={2024}, url={https://reference.wolfram.com/language/ref/FiniteField.html}, note=[Accessed: 31-October-2026]}