NTT计算实例by ChatGPT
创始人
2025-05-28 15:21:47
0

假设我们要计算多项式 f(x) = x^3 + 2x^2 + x + 3 在模数为 5 的情况下的NTT,模数为 p = 5。首先,我们需要将多项式系数表示为模 p 的剩余系。

f(x) = x^3 + 2x^2 + x + 3 ≡ x^3 + 2x^2 + x - 2 (mod 5)

接下来,我们需要选择 NTT 中使用的根。对于模数 p = 5,有两个原根,分别是 2 和 3。我们选择 3 作为根。

第一步是将多项式补零扩展到长度为 4。我们的多项式已经是 4 次的,因此我们不需要做任何事情。

f(x) = x^3 + 2x^2 + x - 2

第二步是计算 W_4^1, W_4^2, W_4^3,其中 W_4^k = 3^k mod 5。

W_4^1 = 3^1 mod 5 = 3
W_4^2 = 3^2 mod 5 = 4
W_4^3 = 3^3 mod 5 = 2

第三步是计算多项式在 W_4^1, W_4^2, W_4^3 处的取值。我们首先计算多项式在 W_4^1 处的取值:

f(W_4^1) = (33)1 + 2(32)1 + 3^1 - 2 = 3 + 2(4) + 3 - 2 = 10 ≡ 0 (mod 5)

然后我们计算多项式在 W_4^2 处的取值:

f(W_4^2) = (33)2 + 2(32)2 + 3^2 - 2 = 27 + 2(16) + 9 - 2 = 66 ≡ 1 (mod 5)

最后,我们计算多项式在 W_4^3 处的取值:

f(W_4^3) = (33)3 + 2(32)3 + 3^3 - 2 = 81 + 2(64) + 27 - 2 = 234 ≡ 4 (mod 5)

因此,多项式 f(x) 在模数为 5 的情况下的NTT是:

NTT(f(x)) = (0, 1, 4, 2)

这里的 NTT(f(x)) 表示多项式 f(x) 的 NTT 结果,其中每个元素对应于 f(x) 在 W_4^0, W_4^1, W_4^2, W_4^3 处的取值。
第四步是进行蝴蝶操作。对于 NTT 中的蝴蝶操作,我们需要选择一个旋转因子,这个旋转因子是根的幂次。对于长度为 4 的多项式,我们需要进行两次蝴蝶操作,因此选择旋转因子为根的平方,即 W_4^2 = 4。

我们使用以下公式进行蝴蝶操作:

A_k = a_k + W_n^k * a_{k + n/2}
B_k = a_k - W_n^k * a_{k + n/2}

其中,a_k 和 a_{k + n/2} 是多项式在 k 和 k + n/2 处的取值,A_k 和 B_k 是计算出来的新值。

我们首先对 k = 0 和 n/2 = 2 进行蝴蝶操作:

A_0 = a_0 + W_4^0 * a_2 = 0 + 1 * 4 = 4
B_0 = a_0 - W_4^0 * a_2 = 0 - 1 * 4 = -4 ≡ 1 (mod 5)

然后对 k = 1 和 n/2 = 2 进行蝴蝶操作:

A_1 = a_1 + W_4^1 * a_3 = 1 + 3 * 2 = 7 ≡ 2 (mod 5)
B_1 = a_1 - W_4^1 * a_3 = 1 - 3 * 2 = -5 ≡ 0 (mod 5)

因此,经过两次蝴蝶操作后,多项式 f(x) 在模数为 5 的情况下的NTT结果是:

NTT(f(x)) = (4, 1, 2, 0)

这里的 NTT(f(x)) 表示多项式 f(x) 的 NTT 结果,其中每个元素对应于 f(x) 在 W_4^0, W_4^1, W_4^2, W_4^3 处的取值。

最后,我们可以通过对NTT结果进行逆变换来计算原多项式 f(x)。由于我们在进行NTT时选择的是根 3,因此在进行逆变换时,我们需要选择的根是 3 的逆元,即 2。我们可以使用以下公式进行逆变换:

a_k = (1/n) * Σ_{j=0}^{n-1} W_n^(kj) * A_j

其中,n 是多项式的长度,A_j 是 NTT 结果中在 j 处的取值。

我们将 NTT(f(x)) = (4, 1, 2, 0) 代入上面的公式,得到:

a_0 = (1/4) * [4 + 1 + 2 + 0] = 7/4 ≡ 2 (mod 5)
a_1 = (1/4) * [4 + 2 * 1 + 0] = 3/2 ≡ 3 (mod 5)
a_2 = (1/4) * [42 * 1 + 0] = -1/2 ≡ 4 (mod 5)
a_3 = (1/4) * [4 - 2 * 1 + 0] = 1/2 ≡ 1 (mod 5)
因此,我们得到了原多项式 f(x) = 2 + 3x + 4x^2 + x^3。

总结一下,NTT 的步骤包括:选择根、求解旋转因子、进行位逆序置换、进行蝴蝶操作、逆变换。每一步都需要仔细计算,注意各个数值的变化和取模运算。

相关内容

热门资讯

莆田卤面「鲜」!海鲜 + 面条... 莆田卤面,堪称福建美食界的璀璨明珠,以一个 “鲜” 字征服无数食客味蕾。这道美食巧妙融合海鲜与面条,...
江苏鸭血粉丝汤 vs 浙江梅干... 在美食丰富的华东地区,江苏的鸭血粉丝汤与浙江的梅干菜都堪称 “省饭” 界的佼佼者。一个是鲜香浓郁的汤...
价格大跳水!国产的即将大量上市... 对于美食爱好者而言,今年似乎又是一个“甜蜜”的年份。从年初开始,车厘子、蓝莓等曾经的高价水果,价格纷...
腌黄瓜最忌直接撒盐!奶奶50年... 大家好呀!我是你们的厨房小能手泡菜君~今天要分享一个让黄瓜"脱胎换骨"的祖传秘方,保证让你惊呼:"原...
潍坊朝天锅香!薄饼卷肉,早餐标... 潍坊朝天锅是齐鲁大地上极具特色的美食名片,以 “薄饼卷肉” 的独特吃法成为当地人早餐的不二之选。这道...
山东煎饼果子:卷万物的神仙吃法... 山东煎饼果子凭借 “卷万物” 的神仙吃法,一跃成为全国早餐顶流。本文从历史文化底蕴、独特制作工艺、丰...
济宁夹饼碳水快乐!薄饼 + 炸... 在鲁西南的饮食版图上,济宁夹饼以独特的姿态占据着重要位置,堪称本地人早餐的灵魂标配。它将薄饼与炸串完...
计算机网络(第七弹) --- ... ❶ 当在浏览器输入一个 URL 后敲下回车, 浏览器首先会根据这里的域名查询对应的 IP 地址; 先...
端午将至 民俗体验游热度持续上... 今年端午节假期恰逢儿童节,亲子家庭成为出行主力军。短途游、民俗体验游热度持续上升。 端午节假期旅游...
掌握“流量密码”,穿着古装逛北... 北京的初夏,不急不躁,阳光柔和地铺陈在城墙砖缝间。风轻轻地吹,拂过一群年轻姑娘的裙摆和鬓角。她们穿着...
数量关系:高频考点常用解题方法... 请点击↑关注、收藏,本博客免费为你获取精彩知识分享!有惊喜哟࿰...
< CSS小技巧:类似phot... 文章目录👉 前言👉 一、使用 `background-ble...
Linux命令·ln ln是linux中又一个非常重要命令,它的功能是为某一个文件在另外一个位置建立一个同步...
“耕读文化”主题民宿开业,到天... 天津北方网讯:在静海,有一座运河怀抱的古镇——陈官屯,灵动乡野与人文风韵,让人想栖身田园间,尤其在初...
“来广州·看龙舟”!端午龙舟领... 2025年端午节假期,广州将以国际龙舟邀请赛为引擎,精心打造“来广州·看龙舟”文旅盛宴,超650场融...
外国游客中国游持续升温 更多外... 本文转自【央视网】; 央视网消息:端午假期即将来临,随着国家出入境政策红利持续释放,中越“跨境一日游...
JAVA SE学习-2.数据类... JAVA SE学习-2.数据类型和运算符 1. 变量 冯诺依曼体系结构: 输入设备...
如何初始化一个基于react+... 以下是使用React和Vite搭建前端项目的基本步骤: 安装Node.js和npm包管...