NTT注意事项

记住几个常用的素数及原根:

998244353==>3

1004535809==>3

167772161==>3

参考这里:

https://www.cnblogs.com/Guess2/p/8422205.html

贴代码,看细节:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=3e6+10;
const long long mod=1004535809;//注意模数
int n,m;
long long a[maxn],b[maxn];

inline long long Pow(long long x,long long b)
{
	long long res=1;
	for(;b;b>>=1)
	{
		if(b&1) res=res*x%mod;
		x=x*x%mod;
	}
	return res;
}

namespace TNT
{
	long long p[maxn],w[21];
	int n,m;
	inline void init(int len)
	{
		for(n=1,m=0;n<=len;n<<=1,m++);//注意是n<=len等于号不能丢
		for(int i=1;i<n;i++) p[i]=(p[i>>1]>>1)|((i&1)<<(m-1));
	}
	inline void ntt(long long a[],int flag)
	{
		for(int i=1;i<n;i++) if(i<p[i]) swap(a[i],a[p[i]]);
		w[0]=Pow(3*1ll,(mod-1)/n);
		if(flag) w[0]=Pow(w[0],mod-2);
		for(int i=1;i<m;i++) w[i]=w[i-1]*w[i-1]%mod;
		for(int i=1,x=m-1;i<n;x--,i<<=1)//后面这些全部不能加=
			for(int j=0;j<n;j+=i<<1)//同上
			{
				long long wi=1;
				for(int k=0;k<i;k++,wi=wi*w[x]%mod)
				{
					long long xx=a[j+k];
					long long yy=a[i+k+j]*wi%mod;
					a[j+k]=(xx+yy)%mod;//注意是j+k
					a[j+k+i]=(xx-yy+mod)%mod;
				}
			}
		if(flag)
		{
			long long inv=Pow(n,mod-2);
			for(int i=0;i<n;i++) a[i]=a[i]*inv%mod;
		}
	}
}

int main()
{
	scanf("%d%d",&n,&m);
	for(int i=0;i<=n;i++) scanf("%lld",&a[i]);
	for(int i=0;i<=m;i++) scanf("%lld",&b[i]);
	m+=n;
	TNT::init(m);
	TNT::ntt(a,0),TNT::ntt(b,0);
	for(int i=0;i<TNT::n;i++) a[i]=a[i]*b[i]%mod;//注意这里是TNT::n
	TNT::ntt(a,1);
	for(int i=0;i<=m;i++) printf("%lld ",a[i]);
	return 0;
}

  

原文地址:https://www.cnblogs.com/linda-fcj/p/9241319.html

时间: 2025-01-12 00:54:21

NTT注意事项的相关文章

[HEOI2016/TJOI2016][bzoj4555] 求和 [斯特林数+NTT]

题面 传送门 思路 首先,我们发现这个式子中大部分的项都和\(j\)有关(尤其是后面的\(2^j\ast j!\)),所以我们更换一下枚举方式,把这道题的枚举方式变成先\(j\)再\(i\) \(f(n)=\sum_{j=0}^n2^j\ast j!\sum_{i=0}^nS_i^j\) 第二类斯特林数有一个基于组合意义的公式: \(S_i^j=\frac1{j!}\sum_{k=0}^j(-1)^kC_j^k(j-k)^i=\sum_{k=0}^j\frac{(-1)^k(j-k)^i}{k!

信息学.学习计划/注意事项

<学习计划> 一.重点学习新算法 1.平衡树splay,动态树LCT 2.(任意模数)NTT 3.莫队算法 4.带修主席树(树状数组套主席树),线段树/树状数组套平衡树 5.后缀数组/后缀自动机 二.刷题,复习.巩固在OJ上打星号的题目 <注意事项> 1.考试时无论题目有多难,都要努力想正解,不要理会别人,保持心态,想不出正解时要全力打暴力. 2.比赛开始时建各种文件夹要快,不耽误时间,离比赛结束15-20分钟时检查程序,把握好时间. 原文地址:https://www.cnblog

面向对象注意事项

在面向对象中,有实例变量和类变量,实例变量为类对象的实例成员,而类变量不仅类可以直接调用,而且类的对象也可以调用.类对象可以对实例变量进行添加.修改.删除操作等... 下面就用个示例来做参考: #!/usr/bin/env python # -*- coding:utf-8 -*- class PersonInfo(object): commity_data = 123 def __init__(self,name,age): self.name = name self.age = age de

switch使用时有哪些注意事项

switch语句用于多分支选择,在使用switch(expr)的时候,expr只能是一个枚举常量(内部也是由整型或字符类型实现)或一个整数表达式,其中整数表达式可以是基本类型int或其对应的包装类Integer,当然也包括不同的长度整型,例如short.由于byte.short和char都能够被隐式地转换为int类型,因此这些类型以及它们对应的包装类型都可以作为switch的表达式.但是,long.float.double.String类型由于不能够隐式地转换为int类型,因此它们不能被用作sw

Citrix Xen 6.2 在Adaptec raid 6805卡子上的安装注意事项

Installing with Citrix XenServer   Note: To install the Adaptec RAID controller driver with CitrixXenServer, you must burn the XenServer driver iso image to a writeable CD. Youwill be prompted to insert the XenServer driver CD twice.You need the XenS

CloudStack添加新的API注意事项

1.***Cmd上面的@APICommand里的responseObject关联对于的Response: 2.在tomcatconf/command.properties.in添加新API的权限: 3.为得到Cmd,都需要实现PluggableService接口的getCommands()方法,核心Cmd都需在ManagementServerImpl类的getComands()方法里将新添加的***Cmd类添加到cmList中. CloudStack添加新的API注意事项,码迷,mamicode

开发APP注意事项

开发APP的时候要注意的一些事项?随着互联网的高速发展,移动APP也如雨后春笋般快速发展.营销战略也逐渐从PC端转为移动端,开创新的营销道路--移动营销.面对移动APP的火热,越来越多的企业和商家们重视移动营销这一块,也迫切开发属于自己的企业APP. 移动开发大师表示:"我们在热衷开发APP的同时也要注意一些事项,以免造成资源的浪费."下面让麦子学院老师来告诉你,当你在开发APP的时候要注意的一些事项: 首先,如果你要开发APP首先第一件事就是做好充分的市场调查,明确知道你要开发什么样

复合索引的优点和注意事项

概念:     单一索引是指索引列为一列的情况,即新建索引的语句只实施在一列上;     用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引);     复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引;     同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引;     设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效; 使用:     创建索引     create index idx1 o

Jetson TX2安装Jetpack 3.0注意事项

Jetson TX2安装Jetpack 3.0注意事项 nvidia jetson tx2配置caffe: http://blog.csdn.net/jiongnima/article/details/70040262 CSDN jiongnima博主的这篇文章非常详细完整,但是作为一个初次接触nvidia jetson TX2的人来说,还是会难免遇到一些困难,下面我在这篇文章的基础上,写一些我在安转Jetpack 3.0时遇到的问题,希望大家可以坐在以后的安装过程中规避这些问题:  1.在nv