使用NTT需要保证模数mod 为质数。

  通过以下代码求得一个模数的原根 , 常见的质数的原根  998244353 -> 3    1e9+7 -> 5

#include<bits/stdc++.h>
#define ll long long
#define IL inline
#define RG register
using namespace std; ll prm[1000],tot,N,root; ll Power(ll bs,ll js,ll MOD){
ll S = 1,T = bs;
while(js){
if(js&1)S = S*T%MOD;
T = T*T%MOD;
js >>= 1;
} return S;
} IL ll GetRoot(RG ll n){
RG ll tmp = n - 1 , tot = 0;
for(RG ll i = 2; i <= sqrt(tmp); i ++){
if(tmp%i==0){
prm[++tot] = i;
while(tmp%i==0)tmp /= i;
}
}
if(tmp != 1)prm[++tot] = tmp; //质因数分解
for(RG ll g = 2; g <= n-1; g ++){
bool flag = 1;
for(RG int i = 1; i <= tot; i ++){ //检测是否符合条件
if(Power(g,(n-1)/prm[i],n) == 1)
{ flag = 0; break; }
}
if(flag)return g;
}return 0; //无解
} int main(){
cin >> N;
root = GetRoot(N);
cout<<root<<endl;
return 0;
}

g是mod(r * 2 ^ k + 1)的原根

r * 2 ^ k + 1

r

k

g

29

57

3

NTT 求原根的更多相关文章

  1. [SDOI2015]序列统计(NTT+求原根)

    题目 [SDOI2015]序列统计 挺好的题!!! 做法 \(f[i][j]\)为第\(i\)个数前缀积在模\(M\)意义下为\(j\) 显然是可以快速幂的:\[f[2*i][j]=\sum\limi ...

  2. POJ 1284 Primitive Roots (求原根个数)

    Primitive Roots 题目链接:id=1284">http://poj.org/problem?id=1284 利用定理:素数 P 的原根的个数为euler(p - 1) t ...

  3. 【poj 1284】Primitive Roots(数论--欧拉函数 求原根个数){费马小定理、欧拉定理}

    题意:求奇质数 P 的原根个数.若 x 是 P 的原根,那么 x^k (k=1~p-1) 模 P 为1~p-1,且互不相同. (3≤ P<65536) 解法:有费马小定理:若 p 是质数,x^( ...

  4. 第八集:魔法阵 NTT求循环卷积

    题目来源:http://www.fjutacm.com/Problem.jsp?pid=3283 题意:给两串长度为n的数组a和b,视为环,a和b可以在任意位置开始互相匹配得到这个函数的值,求这个函数 ...

  5. hdu 4992 Primitive Roots 【求原根模板】

    题目链接 大题流程: 判定是否有原根->求出最小原根->利用最小原根找出全部原根 #include<bits/stdc++.h> using namespace std; ty ...

  6. POJ 1284:Primitive Roots 求原根的数量

    Primitive Roots Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 3381   Accepted: 1980 D ...

  7. luogu P6091 原根

    LINK:原根 再复习一下原根 防止考场上要NTT求原根的时候不会求... 这道题要求求出n之内的所有原根 根据原根的定义. 原根指 若x对于模n的阶为phi(n)且\(1\leq x\leq n\) ...

  8. 【bzoj3992】[SDOI2015]序列统计 原根+NTT

    题目描述 求长度为 $n$ 的序列,每个数都是 $|S|$ 中的某一个,所有数的乘积模 $m$ 等于 $x$ 的序列数目模1004535809的值. 输入 一行,四个整数,N.M.x.|S|,其中|S ...

  9. 【知识总结】多项式全家桶(一)(NTT、加减乘除和求逆)

    我这种数学一窍不通的菜鸡终于开始学多项式全家桶了-- 必须要会的前置技能:FFT(不会?戳我:[知识总结]快速傅里叶变换(FFT)) 以下无特殊说明的情况下,多项式的长度指多项式最高次项的次数加\(1 ...

随机推荐

  1. 第一种方式:cookie的优化与购物车实例

    一 Cookie 的优化 1.1 一般而言,我们设置cookie是在php中设置 例如: <?php setcookie('testKey1','hello world',0,'/'); //# ...

  2. python模块之hashlib模块

    hashlib模块:提供摘要算法 格式: hashlib格式: obj = hashlib.算法(md5,sha....) obj.update(摘要内容:bytes类型) result = obj. ...

  3. codeforce 379(div.2)

    A.B略 C题 ——贪心,二分查找: 对于每一个a[i], 在d中二分查找 s-b[i],注意不要忘记计算速度为x时需要花费的最小时间,以及整数范围为64位整数 1 #include <cstd ...

  4. 开源项目使用 appveyor 自动构建

    我写了几个开源项目,我想要有小伙伴提交的时候自动运行单元测试,自动运行编译,这样可以保证小伙伴提交清真的代码 本文将会告诉大家如何接入 appveyor 自动构建方案,在 Github 上给自己的开源 ...

  5. Vue与React比较

    与React 相似: (1)虚拟DOM(Virtual DOM) 虚拟DOM的诞生是基于:改变真实的DOM状态远比改变一个JS对象的花销要大的多. 虚拟DOM是一个映射真实DOM的JS对象,当有变化产 ...

  6. fetch是什么?写一个fetch请求

    fetch是web提供的一个可以获取异步资源的api,目前还没有被所有浏览器支持,它提供的api返回的是Promise对象,所以你在了解这个api前首先得了解Promise的用法. 参考链接:http ...

  7. dotnet core 使用 GBK 编码

    本文告诉大家如何在 .NET Core 中使用 GBK 编码 默认的 .NET Core 框架不包含 GBK 编码,不包含除了代码页为 28591 和 Unicode(utf-8,utf-16) 之外 ...

  8. JMeter Web测试计划

    在本节中,将学习如何创建测试网页的基本测试计划. 出于演示测试目的,我们将测试URL - https://www.yiibai.com/ 的网页性能. 创建JMeter测试计划 进入到JMeter安装 ...

  9. [wireshark] ip filter

    查ip 时,使用 ip==10.224.37.18 发现无效 使用 ip.dst, 查到了 Match destination: ip.dst == x.x.x.x Match source: ip. ...

  10. mysql:创建新库,新表,查看character

    创建新库create database wenda; 创建新表drop table if exists `user`;create table `user`( `id` int(11) unsigne ...