如何在复数域或模素数域下找单位根
如何在复数域或模素数域下找单位根
参考文章:CF1103E Radix sum - 洛谷专栏、数学小记 #3:从 CF1103E 浅谈异或卷积 - 洛谷专栏。
复数域
可以使用 polar(1, 2 * pi / m)
获得复数域下的
模素数域(素数自选)
如果有素数
洛谷原根模板题太恶臭了,在这里放一下求原根的代码:
// mint 是 F_p 下的数,代码求出 p 的最小原根
mint pmroot() {
vector<int> pri;
int m = mint::mod - 1;
for (int i = 2; i * i <= m; i++) if (m % i == 0) {
pri.push_back(i);
while (m % i == 0) m /= i;
}
if (m > 1) pri.push_back(m);
m = mint::mod - 1;
for (mint g = 1; ; g += 1) {
bool flag = false;
for (int p : pri) {
if (qpow(g, m / p) == 1) flag = true;
}
if (!flag) return g;
}
throw -1;
}
模素数域
若
分圆多项式
其中
void init() { // k 次分圆多项式,次数为 phi[k]
T[0] = 1;
for (auto i : d[k]) { // d[k] 是 k 的所有因子
if (mu[k / i] == 1)
for (int j = phi[k]; j >= i; j--) T[j] -= T[j - i];
else if (mu[k / i] == -1)
for (int j = i; j <= phi[k]; j++) T[j] += T[j - i]; // 实际上是退背包
}
}
本文来自博客园,作者:caijianhong,转载请注明原文链接:https://www.cnblogs.com/caijianhong/p/18737658
标签:
maths
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架