题目链接:洛谷LOJ.

为什么和那些差那么多啊。。

在这里记一下原根

Definition

  若\(a,p\)互质,且\(p>1\),我们称使\(a^n\equiv 1\ (mod\ p)\)成立的最小正整数\(n\)为\(a\)模\(p\)的阶,记作\(\delta_p(a)\)。

  例:\(\delta_7(2)=3\)。

原根

  设\(p\)是正整数,\(a\)是整数,若\(\delta_p(a)=\varphi(m)\),则称\(a\)为模\(p\)的一个原根。

  从另一方面来说,若\(g^i\ mod\ p\neq g^j\ mod\ p\ (p为质数,i\neq j且i,j\in\left[1,p-1\right])\),则\(g\)为\(p\)的原根。

性质

  1. 若\(p\)有原根,那么\(p\)有\(\varphi(\varphi(p))\)个原根。

  2. 有原根的数只有:\(2,4,p^n,2\times p^n\) (\(p\)为奇素数,\(n\)为正整数)。

  3. 一个数的最小原根的大小是\(O(n^{0.25})\)的。

  4. 若\(g\)为\(p\)的原根,则\(g^a\)为\(p\)的原根的充要条件为 \(a\)与\(\varphi(p)\)互质。

  (参考抄自这儿

求法

  求\(p\)的原根:对\(\varphi(p)=p-1\)分解质因子,即令\(p-1=\prod_{i=1}^kp_i^{a_i}\ (p_i为质数)\)

  若\(g^{\frac{p-1}{p_i}}\neq 1\ (mod\ p)\)恒成立,则\(g\)为\(p\)的一个原根。

  1. #include <cstdio>
  2. #include <cctype>
  3. #include <algorithm>
  4. #define P (998244353)
  5. #define G (3)
  6. #define inv_G (332748118)
  7. //#define gc() getchar()
  8. #define MAXIN 300000
  9. #define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
  10. typedef long long LL;
  11. const int N=(1<<21)+5;//2 097 152 //2e6+5;
  12. int n,m,rev[N];
  13. LL A[N],B[N],inv_lim;//全换成int好像大概略快吧
  14. char IN[MAXIN],*SS=IN,*TT=IN;
  15. inline int read()
  16. {
  17. register char c=gc();
  18. for(;!isdigit(c);c=gc());
  19. return c-'0';//233
  20. }
  21. inline LL FP(LL x,LL k)
  22. {
  23. LL t=1;
  24. for(; k; k>>=1,x=x*x%P)
  25. if(k&1) t=t*x%P;
  26. return t;
  27. }
  28. void NTT(LL *a,int lim,int type)
  29. {
  30. for(int i=0; i<lim; ++i)
  31. if(i<rev[i]) std::swap(a[i],a[rev[i]]);
  32. for(int i=2; i<=lim; i<<=1)
  33. {
  34. int mid=i>>1;
  35. LL Wn=FP(~type?G:inv_G,(P-1)/i),t,w;
  36. for(int j=0; j<lim; j+=i)
  37. {
  38. LL w=1;
  39. for(int k=0; k<mid; ++k, w=w*Wn%P)
  40. a[j+k+mid]=(a[j+k]-(t=w*a[j+k+mid]%P)+P)%P,
  41. a[j+k]=(a[j+k]+t)%P;
  42. }
  43. }
  44. if(type==-1) for(int i=0; i<lim; ++i) a[i]=a[i]*inv_lim%P;
  45. }
  46. int main()
  47. {
  48. scanf("%d%d",&n,&m);//sb了拿那个read读n,m。。
  49. for(int i=0; i<=n; ++i) A[i]=read();//(read()%P+P)%P
  50. for(int i=0; i<=m; ++i) B[i]=read();
  51. int lim=1,len=0;
  52. while(lim<=n+m) lim<<=1,++len;
  53. inv_lim=FP(lim,P-2);
  54. for(int i=1; i<lim; ++i)
  55. rev[i] = (rev[i>>1]>>1) | ((i&1)<<len-1);
  56. NTT(A,lim,1), NTT(B,lim,1);
  57. for(int i=0; i<lim; ++i) A[i]=A[i]*B[i]%P;
  58. NTT(A,lim,-1);
  59. for(int i=0; i<=n+m; ++i) printf("%lld ",A[i]);
  60. return 0;
  61. }

洛谷.3803.[模板]多项式乘法(NTT)的更多相关文章

  1. 洛谷.3803.[模板]多项式乘法(FFT)

    题目链接:洛谷.LOJ. FFT相关:快速傅里叶变换(FFT)详解.FFT总结.从多项式乘法到快速傅里叶变换. 5.4 又看了一遍,这个也不错. 2019.3.7 叕看了一遍,推荐这个. #inclu ...

  2. 洛谷.4512.[模板]多项式除法(NTT)

    题目链接 多项式除法 & 取模 很神奇,记录一下. 只是主要部分,更详细的和其它内容看这吧. 给定一个\(n\)次多项式\(A(x)\)和\(m\)次多项式\(D(x)\),求\(deg(Q) ...

  3. 洛谷.4238.[模板]多项式求逆(NTT)

    题目链接 设多项式\(f(x)\)在模\(x^n\)下的逆元为\(g(x)\) \[f(x)g(x)\equiv 1\ (mod\ x^n)\] \[f(x)g(x)-1\equiv 0\ (mod\ ...

  4. 洛谷.4721.[模板]分治FFT(NTT)

    题目链接 换一下形式:\[f_i=\sum_{j=0}^{i-1}f_jg_{i-j}\] 然后就是分治FFT模板了\[f_{i,i\in[mid+1,r]}=\sum_{j=l}^{mid}f_jg ...

  5. 洛谷 P4245 [模板]任意模数NTT —— 三模数NTT / 拆系数FFT(MTT)

    题目:https://www.luogu.org/problemnew/show/P4245 用三模数NTT做,需要注意时间和细节: 注意各种地方要取模!传入 upt() 里面的数一定要不超过2倍 m ...

  6. 洛谷.4245.[模板]任意模数NTT(MTT/三模数NTT)

    题目链接 三模数\(NTT\): 就是多模数\(NTT\)最后\(CRT\)一下...下面两篇讲的都挺明白的. https://blog.csdn.net/kscla/article/details/ ...

  7. 洛谷 P4512 [模板] 多项式除法

    题目:https://www.luogu.org/problemnew/show/P4512 看博客:https://www.cnblogs.com/owenyu/p/6724611.html htt ...

  8. 洛谷 P4238 [模板] 多项式求逆

    题目:https://www.luogu.org/problemnew/show/P4238 看博客:https://www.cnblogs.com/xiefengze1/p/9107752.html ...

  9. 洛谷P3373 [模板]线段树 2(区间增减.乘 区间求和)

    To 洛谷.3373 [模板]线段树2 题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输入格 ...

随机推荐

  1. 在jsp中接收并处理servlet传过来的含有bean的List

    在jsp中接收并处理servlet传过来的含有bean的List 例如有以下bean package com.test.domain; class Student{ private Stirng na ...

  2. python 爬虫简单的demo

    ''' @author :Eric-chen @contact:809512722@qq.com @time :2018/1/3 17:55 @desc :通过爬取http://movie.douba ...

  3. PyTorch快速入门教程七(RNN做自然语言处理)

    以下内容均来自: https://ptorch.com/news/11.html word embedding也叫做word2vec简单来说就是语料中每一个单词对应的其相应的词向量,目前训练词向量的方 ...

  4. listen系统调用

    /* * Perform a listen. Basically, we allow the protocol to do anything * necessary for a listen, and ...

  5. numpy细碎知识点

    np.random.rand() 基于python自带模块random的random函数的一个延伸吧,生成指定数量的列表 np.random.rand(a,b) 参数a,b均为整型,生成含有a个元素的 ...

  6. 串口流控制详解(CTS/RTS,DTR/DSR)

    1 首先看下关于流控相关的几个端口的解释如下图 除了必要的地(GND)要连接外,其它连如下 步骤阅读 2 计算机和猫(MODEM)的连接 步骤阅读 步骤阅读 3 计算机和非猫的连接(null  mod ...

  7. C#中HttpWebRequest的GetRequestStream执行的效率太低,甚至偶尔死掉

    为了提高httpwebrequest的执行效率,查到了一些如下设置 request.ServicePoint.Expect100Continue = false; request.ServicePoi ...

  8. 最详细的block底层

    主要讲述的要点: block 干什么用的 block 语法 block 底层实现 block 变量捕捉 block 的种类.在存储空间中的存储位置 block 循环引用 __block 在ARC 中 ...

  9. Python之容器类Collections

    容器类Collections 标签(空格分隔): Python进阶 defaultdict counter deque namedtuple defaultdict defaultdict的作用是可以 ...

  10. pip install 升级时候 出现报asciii码错误的问题。

    原因是pip安装python包会加载我的用户目录,我的用户目录恰好是中文的,ascii不能编码.解决办法是: python目录 Python27\Lib\site-packages 建一个文件site ...