题意:多项式除法,A(x)=C(x)*B(x)+D(x),给定A(x),B(x),求C(x),D(x)
题解:A(x)的度是n,B(x)的度是m
定义\(A'(x)=x^n*A(\frac{1}{x})\),可以发现\(A'(x)=A(n-x)\)
\(A(\frac{1}{x})=C(\frac{1}{x})*B(\frac{1}{x})+D(\frac{1}{x})\)
\(x^nA(\frac{1}{x})=x^{n-m}*C(\frac{1}{x})*x^{m}*B(\frac{1}{x})+x^{n-m+1}*x^{m}D(\frac{1}{x})\)
\(A'(x)=C'(x)*B'(x)+x^{n-m+1}*D'(x)\)
那么我们考虑在\(mod(x^{n-m+1})\)的等式,即可消去D'(x)
这样我们便可求出\(C'(x)=\frac{A'(x)}{B'(x)}(mod(x^{n-m+1}))\),用多项式求逆,再回退C,带入可求出D

//#pragma GCC optimize(2)
//#pragma GCC optimize(3)
//#pragma GCC optimize(4)
//#pragma GCC optimize("unroll-loops")
//#pragma comment(linker, "/stack:200000000")
//#pragma GCC optimize("Ofast,no-stack-protector")
//#pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")
#include<bits/stdc++.h>
#define fi first
#define se second
#define db double
#define mp make_pair
#define pb push_back
#define pi acos(-1.0)
#define ll long long
#define vi vector<int>
#define mod 998244353
#define ld long double
#define C 0.5772156649
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#define pll pair<ll,ll>
#define pil pair<int,ll>
#define pli pair<ll,int>
#define pii pair<int,int>
//#define cd complex<double>
#define ull unsigned long long
#define base 1000000000000000000
#define Max(a,b) ((a)>(b)?(a):(b))
#define Min(a,b) ((a)<(b)?(a):(b))
#define fin freopen("a.txt","r",stdin)
#define fout freopen("a.txt","w",stdout)
#define fio ios::sync_with_stdio(false);cin.tie(0)
template<typename T>
inline T const& MAX(T const &a,T const &b){return a>b?a:b;}
template<typename T>
inline T const& MIN(T const &a,T const &b){return a<b?a:b;}
inline void add(ll &a,ll b){a+=b;if(a>=mod)a-=mod;}
inline void sub(ll &a,ll b){a-=b;if(a<0)a+=mod;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
inline ll qp(ll a,ll b){ll ans=1;while(b){if(b&1)ans=ans*a%mod;a=a*a%mod,b>>=1;}return ans;}
inline ll qp(ll a,ll b,ll c){ll ans=1;while(b){if(b&1)ans=ans*a%c;a=a*a%c,b>>=1;}return ans;}using namespace std;const double eps=1e-8;
const ll INF=0x3f3f3f3f3f3f3f3f;
const int N=300000+10,maxn=400000+10,inf=0x3f3f3f3f;ll a[N<<3],b[N<<3],c[N<<3],d[N<<3],e[N<<3],tmp[N<<3];
int rev[N<<3];
void getrev(int bit)
{for(int i=0;i<(1<<bit);i++)rev[i]=(rev[i>>1]>>1) | ((i&1)<<(bit-1));
}
void ntt(ll *a,int n,int dft)
{for(int i=0;i<n;i++)if(i<rev[i])swap(a[i],a[rev[i]]);for(int step=1;step<n;step<<=1){ll wn=qp(3,(mod-1)/(step*2));if(dft==-1)wn=qp(wn,mod-2);for(int j=0;j<n;j+=step<<1){ll wnk=1;for(int k=j;k<j+step;k++){ll x=a[k];ll y=wnk*a[k+step]%mod;a[k]=(x+y)%mod;a[k+step]=(x-y+mod)%mod;wnk=wnk*wn%mod;}}}if(dft==-1){ll inv=qp(n,mod-2);for(int i=0;i<n;i++)a[i]=a[i]*inv%mod;}
}
void pol_inv(int deg,ll *a,ll *b)
{if(deg==1){b[0]=qp(a[0],mod-2);return ;}pol_inv((deg+1)>>1,a,b);int sz=0;while((1<<sz)<=deg)sz++;sz++;getrev(sz);int len=1<<sz;for(int i=0;i<deg;i++)tmp[i]=a[i];for(int i=deg;i<len;i++)tmp[i]=0;ntt(tmp,len,1),ntt(b,len,1);for(int i=0;i<len;i++)b[i]=(2ll-tmp[i]*b[i]%mod+mod)%mod*b[i]%mod;ntt(b,len,-1);for(int i=deg;i<len;i++)b[i]=0;
}
void pol_div(int n,int m,ll *a,ll *b,ll *c,ll *d)
{for(int i=0;i<=n-m;i++)if(m>=i)c[i]=b[m-i];int sz=0;while((1<<sz)<=MAX(n-m+1,m))sz++;sz++;int len=1<<sz;pol_inv(len,c,d);for(int i=0;i<=n-m;i++)c[i]=a[n-i];for(int i=n-m+1;i<len;i++)c[i]=d[i]=0;getrev(sz);ntt(c,len,1);ntt(d,len,1);for(int i=0;i<len;i++)c[i]=c[i]*d[i]%mod;ntt(c,len,-1);reverse(c,c+n-m+1);for(int i=n-m+1;i<len;i++)c[i]=0;sz=0;while((1<<sz)<=n+1)sz++;sz++;len=1<<sz;getrev(sz);ntt(c,len,1);ntt(b,len,1);for(int i=0;i<len;i++)d[i]=c[i]*b[i]%mod;ntt(d,len,-1);ntt(c,len,-1);for(int i=0;i<len;i++)d[i]=(a[i]-d[i]+mod)%mod;for(int i=m;i<len;i++)d[i]=0;
}
int main()
{int n,m;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]);pol_div(n,m,a,b,c,d);for(int i=0;i<=n-m;i++)printf("%lld ",c[i]);puts("");for(int i=0;i<m;i++)printf("%lld ",d[i]);puts("");return 0;
}
/********************
5 1
1 9 2 6 0 8
1 7
********************/

转载于:https://www.cnblogs.com/acjiumeng/p/9530479.html

P4512 【模板】多项式除法相关推荐

  1. luogu P4512 多项式除法 (模板题、FFT、多项式求逆)

    luogu P4512 多项式除法 (模板题.FFT.多项式求逆) 手动博客搬家: 本文发表于20181206 14:42:53, 原地址https://blog.csdn.net/suncongbo ...

  2. 【学习笔记】超简单的多项式除法(含完整证明)

    整理的算法模板合集: ACM模板 目录 多项式除法 P4512 [模板]多项式除法 tips 还没调出来的vector版本代码 点我看多项式全家桶(●^◡_◡◡​^●) 多项式除法 P4512 [模板 ...

  3. 多项式——多项式除法

    多项式--多项式除法 给定一个 nnn 次多项式 A(x)A(x)A(x) 和一个 mmm 次多项式 B(x)B(x)B(x) ,请求出多项式 D(x)D(x)D(x), R(x)R(x)R(x),满 ...

  4. 多项式算法7:多项式除法

    多项式算法7:多项式除法 多项式除法 前置知识: FFT NTT 多项式求逆 多项式除法 算法简述: 给定多项式FFF , GGG求出多项式RRR,QQQ使得F=G×Q+RF=G \times Q + ...

  5. deconv--反褶积和多项式除法

    [功能简介]求向量反褶积和进行多项式除法运算. [语法格式] [q,r]=deconv(v,u) 参数q和r分别返回多项式v除以多项式u的商多项式和余多项式. [实例3.33]求多项式(x2+2x+1 ...

  6. 多项式除法,多项式取模

    多项式除法 给定一个nnn次多项式F(x)F(x)F(x)和mmm次多项式G(x)G(x)G(x),要求R(x),Q(x)R(x), Q(x)R(x),Q(x),满足F(x)=R(x)G(x)+Q(x ...

  7. C++多项式除法的探讨

    最近的一项工作就是用vector实现多项式类,这个类需要完成多项式的数据结构的定义以及基本运算,包括加减乘除,前三个还比较容易,对于多项式的除法,因为有除不尽的情况,比如: 计算 其结果是: 明显是除 ...

  8. PTA L2-018 多项式A除以B (多项式除法)

    L2-018 多项式A除以B (25 分) 这仍然是一道关于A/B的题,只不过A和B都换成了多项式.你需要计算两个多项式相除的商Q和余R,其中R的阶数必须小于B的阶数. 输入格式: 输入分两行,每行给 ...

  9. 基于MATLAB 2014b的多项式除法程序

    多项式运算所涉及的函数见下表 conv 实现卷积和多项式乘法 deconv 实现去卷积和多项式除法 poly 求具有指定根的多项式 polyder 多项式求导 polyeig 求多项式的特征值 pol ...

最新文章

  1. 南京、苏州、杭州、上海你更喜欢哪座城市?
  2. mysql 主从 网络异常_mysql主从常见异常问题解决
  3. .NET中栈和堆的比较【转自:c#开发园地】
  4. 带有LLVM的eBPF组件
  5. 2018农行--软开
  6. 解决可视化界面的时候灰屏【已解决】
  7. 透明FLASH的插入方法
  8. QT 使用全局钩子监听鼠标事件和键盘事件
  9. NSSA区域和Totally NSSA区域
  10. 苹果手机又刷屏啦!!它是如何做到的?
  11. 智慧物流在大宗货运领域“落地”有多难?
  12. 如何抠图人像换背景?教你一个在线操作的方法
  13. 【问题处理】Word修改页边距后,目录没有右对齐
  14. JS - Jquery 利用cookie 实现本地收藏功能,不重复无需多次命名
  15. 2015年7月30日工作总结
  16. UDP数据包协议格式详解
  17. python自动化配置路由器_H3C MSR 系列路由器 配置指导(V7)-R0304-6W105
  18. 服务器托管和虚拟主机区别,虚拟主机和托管主机的区别是什么
  19. 对塑料瓶无知真是害死人
  20. 阿里云APP软件著作权在线登记步骤?

热门文章

  1. 改动下ICTCLAS4J 0.9.1 提供了分词速度
  2. python py生成及调用pyc文件
  3. Kernel Video Converter中文版
  4. DAZ Studio Pro中文版
  5. 一、select查询
  6. 手把手带你入门 Spring Security!
  7. Zend framework重定向的方法
  8. 零基础学习JavaSE(一)
  9. Django之Form组件
  10. make的使用和Makefile规则和编程及其基本命令(简单)