使用NTT需要保证模数mod 为质数。 通过以下代码求得一个模数的原根 , 常见的质数的原根 998244353 -> 3 1e9+7 -> 5 #include<bits/stdc++.h> #define ll long long ...
原根 为了简单起见,只考虑素数的情况。 并不是只有素数才有原根 定义:对于素数 p ,如果存在一个正整数 lt a lt p ,使得 a , a , ..., a p 模 p 的值取遍 , ,...,p 的所有整数,称 a 是 p 的一个原根 primitive root ,其实就是循环群的生成元。 如果 a j equiv a i mod p ,则 i equiv j mod p 。这里有两个例 ...
2019-09-11 22:10 0 389 推荐指数:
使用NTT需要保证模数mod 为质数。 通过以下代码求得一个模数的原根 , 常见的质数的原根 998244353 -> 3 1e9+7 -> 5 #include<bits/stdc++.h> #define ll long long ...
当需要求质数\(P\)的原根\(G\),只需枚举\(a \in [2,P - 1]\),检验对\(P - 1\)的所有质因子\(p_i\),\(a^{\frac{P - 1}{p_i}} \mod P\)是否等于\(1\),若都不等于\(1\),则\(a\)为\(P\)的原根 51Nod原根 ...
一个数m如果有原根,则其原根个数为phi(phi(m))。特别地,对素数有phi(p)=p-1。 假设g是奇素数p的一个原根,则g^1,g^2,...,g^(p-1)在模p意义下两两不同,且结果恰好为1~p-1,由此可以定义“离散对数”,与连续数学中的对数有异曲同工之妙。 离散对数又叫 ...
定义: 设m>1,gcd(a,m)=1,使得成立的最小正整数d为a对模m的阶,记为δm(a) 如果δm(a)=φ(m),则称a是模m的原根 定理:设m>1,gcd(a,m)=1,那么正整数x是同于方程的一个根当且仅当δm(a) | x 定理:由欧拉定理得 gcd(a,n ...
Primitive Roots Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
测试结果: ...
1、原根的定义: 原根,是一个数学符号。设m是正整数,a是整数,若a模m的阶等于φ(m)(m的欧拉函数),则称a为模m的一个原根。 阶:a和模m互质,使ad ≡1(mod m)成立的最小正整数d称为a对模m的阶。例如:22≡1(mod3),2对模3的阶为2。 假设一个数g对于P来说是原根 ...
时隔两三个月重新打$ntt$的时候,已经忘记了常见模数的原根。 想要回忆原根的求法,以备不时之需,然而也忘记了。 所以颓了大神$yxs$的证明博客,为了防止再次遗忘,来复读一遍大神的做法和证明。 做法: 因为原根往往很小,所以可以采用暴力枚举的方法。 然而直接暴力$check ...