因为在模意义下需要各种素数。 如果$r \cdot 2^k + 1 $ 是个素数,那么在\(\bmod r \cdot 2^k + 1\)意义下,可以处理 \(2^k\)以内规模的数据。 记录一下 \(a*2^k + 1\)型素数的原根 \(g\)。 \(a*2^k ...
因为在模意义下需要各种素数。 如果$r \cdot 2^k + 1 $ 是个素数,那么在\(\bmod r \cdot 2^k + 1\)意义下,可以处理 \(2^k\)以内规模的数据。 记录一下 \(a*2^k + 1\)型素数的原根 \(g\)。 \(a*2^k ...
使用NTT需要保证模数mod 为质数。 通过以下代码求得一个模数的原根 , 常见的质数的原根 998244353 -> 3 1e9+7 -> 5 #include<bits/stdc++.h> #define ll long long ...
原根求解算法: 获取一个数\(N\)的原根\(root\)的算法 快速数论变换算法: 计算多项式\(f_1*f_2\)在模\(P\) (\(P\)为质数) 意义下的卷积。 讲真的,只要把\(FFT\)的单位复数根换成原根就行了。 注意要提前用上面的算法把模数的原根算出来。 ...
)=1 定理:模m有原根的充要条件是m=2,4,,其中p为奇质数,n为任意正整数 定理:素数必有原根 ...
幸运的原根如下: 有质数 \(p = k\cdot 2^r + 1\), 原根为 \(g\): 判断代码: \(p\) \(r\) \(k\) \(g\) 81788929 21 39 ...
任意模数\(NTT\) 众所周知,为了满足单位根的性质,\(NTT\)需要质数模数,而且需要能写成\(a2^{k} + 1\)且\(2^k \ge n\) 比较常用的有\(998244353,1004535809,469762049\),这三个原根都是\(3\) 如果要任意模数怎么办? \(n ...
阶:设a,p是整数,a和p互素,那么:使 成立的最小正整数n叫做a模p的阶. 原根:设m是正整数,a是整数,若a mod m的阶等于φ(m),则称a为模m的一个原根.(其中φ(m)表示m的欧拉函数) 假设一个数g是质数P的原根 ...
题目链接 \(Description\) 给定\(n,m,x\)和集合\(S\)。求\(\prod_{i=1}^na_i\equiv x\ (mod\ m)\)的方案数。其中\(a_i\in S\ ...