题目链接:洛谷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\)的一个原根。

#include <cstdio>
#include <cctype>
#include <algorithm>
#define P (998244353)
#define G (3)
#define inv_G (332748118)
//#define gc() getchar()
#define MAXIN 300000
#define gc() (SS==TT&&(TT=(SS=IN)+fread(IN,1,MAXIN,stdin),SS==TT)?EOF:*SS++)
typedef long long LL;
const int N=(1<<21)+5;//2 097 152 //2e6+5; int n,m,rev[N];
LL A[N],B[N],inv_lim;//全换成int好像大概略快吧
char IN[MAXIN],*SS=IN,*TT=IN; inline int read()
{
register char c=gc();
for(;!isdigit(c);c=gc());
return c-'0';//233
}
inline LL FP(LL x,LL k)
{
LL t=1;
for(; k; k>>=1,x=x*x%P)
if(k&1) t=t*x%P;
return t;
}
void NTT(LL *a,int lim,int type)
{
for(int i=0; i<lim; ++i)
if(i<rev[i]) std::swap(a[i],a[rev[i]]);
for(int i=2; i<=lim; i<<=1)
{
int mid=i>>1;
LL Wn=FP(~type?G:inv_G,(P-1)/i),t,w;
for(int j=0; j<lim; j+=i)
{
LL w=1;
for(int k=0; k<mid; ++k, w=w*Wn%P)
a[j+k+mid]=(a[j+k]-(t=w*a[j+k+mid]%P)+P)%P,
a[j+k]=(a[j+k]+t)%P;
}
}
if(type==-1) for(int i=0; i<lim; ++i) a[i]=a[i]*inv_lim%P;
} int main()
{
scanf("%d%d",&n,&m);//sb了拿那个read读n,m。。
for(int i=0; i<=n; ++i) A[i]=read();//(read()%P+P)%P
for(int i=0; i<=m; ++i) B[i]=read();
int lim=1,len=0;
while(lim<=n+m) lim<<=1,++len;
inv_lim=FP(lim,P-2);
for(int i=1; i<lim; ++i)
rev[i] = (rev[i>>1]>>1) | ((i&1)<<len-1);
NTT(A,lim,1), NTT(B,lim,1);
for(int i=0; i<lim; ++i) A[i]=A[i]*B[i]%P;
NTT(A,lim,-1);
for(int i=0; i<=n+m; ++i) printf("%lld ",A[i]); return 0;
}

洛谷.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. 20165320 Java实验三:敏捷开发与XP实践

    实验内容: 敏捷开发与XP实践 一 实验要求: 安装alibaba 插件,解决代码中的规范问题在IDEA中使用工具(Code->Reformate Code)把下面代码重新格式化,再研究一下Co ...

  2. Python——杂记

    python 最近出错总结: 1.而for..in ..中不要用else if  x in y:     print  else:     print2.def fibs(num): ...     ...

  3. Cloud Lab: 泰晓实验云台【转】

    转自:http://tinylab.org/cloud-lab/ 可快速构建的计算机课程在线实验平台 由 Wu Zhangjin 创建于 2017/10/06 评论 打赏 项目描述 泰晓实验云台 项目 ...

  4. dorado 的学习位置、控件使用方法查找、示例演示地址

    dorado的学习位置: http://wiki.bsdn.org/display/dorado7/Project+Home dorado的控件使用方法查找: http://dorado7.bsdn. ...

  5. FastDFS集群部署

    之前介绍过关于FastDFS单机部署,详见博文:FastDFS+Nginx(单点部署)事例 下面来玩下FastDFS集群部署,实现高可用(HA) 服务器规划: 跟踪服务器1[主机](Tracker S ...

  6. WebApi参数问题方案

    原文:http://www.cnblogs.com/landeanfen/p/5337072.html

  7. openlayers常用操作

    1.坐标转换 根据当前坐标系与目标坐标系进行转换ol.proj.transform(coordinate, source, destination);  //coordinate:数组:source: ...

  8. jQuery中绑定事件的几种方法

    以click事件为例,jQuery中绑定事件有三种方法: (1)target.click(function(){});  (2)target.bind("click",functi ...

  9. tf.metrics.accuracy ==>坑货

    tf.metrics.accuracy输出两个值,第一个值为上几步的平均精度,第二值是上几步与该步的精度的平均值. 正常的计算单个batch正确率的代码 self.correct_prediction ...

  10. SQL Server存储过程的删除方法

    SQL Server存储过程的删除方法使我们经常会用到的,下面就为您介绍扩展存储过程的删除方法,如果您对SQL Server存储过程方面感兴趣的话,不妨一看. --清除SQL Server所有的危险扩 ...