题目链接:洛谷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. 使用 TypeScript 改造构建工具及测试用例

    最近的一段时间一直在搞TypeScript,一个巨硬出品.赋予JavaScript语言静态类型和编译的语言. 第一个完全使用TypeScript重构的纯Node.js项目已经上线并稳定运行了. 第二个 ...

  2. 查看GCC的内置宏定义

    开发过程中我们常常需要使用宏定义.. 为了尽可能多的使用GCC为我们提供的特性,首先我们需要知道gcc提供了那些特性... gcc -dM -E - < /dev/null 没错,就这么一句话就 ...

  3. 20165230 2017-2018-2 《Java程序设计》第7周学习总结

    20165230 2017-2018-2 <Java程序设计>第7周学习总结 教材学习内容总结 第十一章 JDBC与MySQL数据库 本周了解了如何在Java程序中使用JDBC语提供的AP ...

  4. nand flash 的oob 及坏块管理

    0.NAND的操作管理方式      NAND FLASH的管理方式:以三星FLASH为例,一片Nand flash为一个设备(device),1 (Device) = xxxx (Blocks),1 ...

  5. MySQL 5.6 GTID Replication【转】

    一. MySQL 5.6引入了GTID的概念,那么GTID是何方神圣?其实也不复杂,就是一个全局事务标示符.使用GTID时,每次事务提交都会在binlog里生成1个唯一的标示符,它由UUID和事务ID ...

  6. sicily 1500. Prime Gap

    Description The sequence of n ? 1 consecutive composite numbers (positive integers that are not prim ...

  7. http://code52.org/DownmarkerWPF/

    http://code52.org/DownmarkerWPF/ http://kb.cnblogs.com/page/132209/

  8. PHP获得用户的真实IP地址

    <?php /** * 获得用户的真实IP地址 * * @access public * @return string */ function real_ip() { static $reali ...

  9. python面向对象(六)之元类

    元类 1. 类也是对象 在大多数编程语言中,类就是一组用来描述如何生成一个对象的代码段.在Python中这一点仍然成立: In [13]: class ObjectCreator(object): . ...

  10. python面向对象(五)之多态

    继承 ​ 在讲多态之前我们再复习下继承,下面是一个例子. ​ Circle 和 Rectangle 继承自 Shape,不同的图形,面积(area)计算方式不同. # shape.py class S ...