【学习笔记】超简单的多项式开方
整理的算法模板合集: ACM模板
目录
- P5205 【模板】多项式开根
P5205 【模板】多项式开根
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 5000007;
const int p = 998244353, gg = 3, ig = 332738118;
const int mod = 998244353;
int limit = 1;
int L;
int R[N];
ll f[N], g[N], h[N];
ll A[N], B[N], C[N];template <typename T>void read(T &x)
{x = 0;register int f = 1;register char ch = getchar();while(ch < '0' || ch > '9') {if(ch == '-')f = -1;ch = getchar();}while(ch >= '0' && ch <= '9') {x = x * 10 + ch - '0';ch = getchar();}x *= f;
}ll qpow(ll a, ll b)
{ll res = 1;while(b) {if(b & 1) res = res * a % mod;a = a * a % mod;b >>= 1;}return res % p;
}ll inv(ll x) {return qpow(x, mod - 2);}
int inv2 = qpow(2, mod - 2);void NTT(ll *A, int type)
{for(int i = 0; i < limit; ++ i)if(i < R[i])swap(A[i], A[R[i]]);for(int mid = 1; mid < limit; mid <<= 1) {ll wn = qpow(gg, (mod - 1) / (2 * mid));if(type == -1) wn = qpow(wn, mod - 2);for(int len = mid << 1, pos = 0; pos < limit; pos += len) {ll w = 1;for(int k = 0; k < mid; ++ k, w = (w * wn) % mod){int x = A[pos + k] % mod;int y = w * A[pos + k + mid] % mod;A[pos + k] = (x + y) % mod;A[pos + k + mid] = (x - y + mod) % mod;}}}if(type == -1) {ll limit_inv = inv(limit);for(int i = 0; i < limit; ++ i) {A[i] = (A[i] * limit_inv) % mod;}}
}//多项式求逆
void get_inv(ll *A, ll *B, int deg)
{if(deg == 1) {B[0] = inv(A[0]);return ;}get_inv(A, B, (deg + 1) >> 1);for(limit = 1; limit <= (deg << 1); limit <<= 1);for(int i = 0; i < limit; ++ i) {R[i] = (R[i >> 1] >> 1) | ((i & 1) ? (limit >> 1) : 0);C[i] = (i < deg ? A[i] : 0);}NTT(C, 1), NTT(B, 1);for(int i = 0; i < limit; ++ i)B[i] = (2ll - C[i] * B[i] % mod + mod) % mod * B[i] % mod;NTT(B, -1);fill(B + deg, B + limit, 0);
}ll t[N];void poly_sqrt(ll *f, ll *h, int deg) {//polynomial 多项式if (deg == 1) {h[0] = 1;return;}poly_sqrt(f, h, deg + 1 >> 1);limit = 1;while (limit < deg << 1) {limit <<= 1;}fill(g, g + limit, 0);get_inv(h, g, deg);copy(f, f + deg, t);fill(t + deg, t + limit, 0);NTT(t, 1);NTT(g, 1);NTT(h, 1);for (int i = 0; i < limit; i++) {h[i] = 1LL * inv2 * (1LL * h[i] % mod + 1LL * g[i] * t[i] % mod) % mod;}NTT(h, -1);fill(h + deg, h + limit, 0);
}
int n, m;
ll a[N], b[N];//输入g输出f中间多项式h
//h是g的一半的平方根
int main()
{read(n);for(int i = 0; i < n; ++ i) read(a[i]);poly_sqrt(a, b, n);for(int i = 0; i < n; ++ i)printf("%lld ", b[i]);return 0;
}
【学习笔记】超简单的多项式开方相关推荐
- Unity学习笔记--超简单:两个游戏对象直接用线连接(UI和世界坐标下均可)
目录 UI用 效果图 UI代码示例 挂载示例 世界坐标用 挂载示例 效果图 世界坐标代码示例 我们分两种情况,一种是UI上连线,一种是世界坐标下连线. UI用 效果图 UI代码示例 public cl ...
- python自训练神经网络_tensorflow学习笔记之简单的神经网络训练和测试
本文实例为大家分享了用简单的神经网络来训练和测试的具体代码,供大家参考,具体内容如下 刚开始学习tf时,我们从简单的地方开始.卷积神经网络(CNN)是由简单的神经网络(NN)发展而来的,因此,我们的第 ...
- VC学习笔记:简单绘图
VC学习笔记:简单绘图 SkySeraph Oct.29th 2009 HQU Email-zgzhaobo@gmail.com QQ-452728574 Latest Modified Date ...
- STM32F429I-Discovery学习笔记--(1)简单上手和官方例程的下载与使用
STM32F429I-Discovery学习笔记–(1)简单上手和官方例程的下载与使用 到手测试 收到开发板后我们要首先检查一下外观有没有磕碰破损,排针是否发生弯折,重要的是看一下JP3和CN4处的跳 ...
- Tensorflow2学习笔记:简单灰度图分类
Tensorflow2学习笔记:简单灰度图分类 相关介绍 实验环境 实验步骤 导入相关库 导入数据集 浏览数据 预处理数据 构建模型 设置层 编译模型 训练模型 向模型馈送数据 评估准确率 进行预测 ...
- 【学习笔记】超简单的多项式除法(含完整证明)
整理的算法模板合集: ACM模板 目录 多项式除法 P4512 [模板]多项式除法 tips 还没调出来的vector版本代码 点我看多项式全家桶(●^◡_◡◡^●) 多项式除法 P4512 [模板 ...
- 【学习笔记】超简单的多项式反三角函数(含全套证明)
整理的算法模板合集: ACM模板 目录 [模板]P5265 多项式反三角函数 点我看多项式全家桶(●^◡_◡◡^●) [模板]P5265 多项式反三角函数 P5265 多项式反三角函数 前置函数多项 ...
- 【学习笔记】超简单的多项式三角函数(含全套证明)
整理的算法模板合集: ACM模板 目录 P5264 多项式三角函数 点我看多项式全家桶(●^∀^●) P5264 多项式三角函数 如果模的是任意p的话可以枚举i,或者使用Cipolla算法. //#p ...
- Netty学习笔记(六) 简单的聊天室功能之WebSocket客户端开发实例
在之前的Netty相关学习笔记中,学习了如何去实现聊天室的服务段,这里我们来实现聊天室的客户端,聊天室的客户端使用的是Html5和WebSocket实现,下面我们继续学习. 创建客户端 接着第五个笔记 ...
最新文章
- 8种常见机器学习算法比较
- IIS中 flv、swf 文件无法播放
- php无嵌套遍历多维数组,不递归怎么遍历多维数组(维数不定)
- python中字符串格式化符号含义
- 物联网全面崛起 LED企业大有可为
- 高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题
- hbase 集群(完全分布式)方式安装
- 嵌入式Linux内核,文件系统的制作
- 【故障处理】ORA-19809错误处理
- php zscan,PHP redis SCAN、SSCAN、ZSCAN、HSCAN 的使用, pipe 快速redis插入数据
- 计算机技术和教育,计算机技术和现代数学教育
- yeezy350灰橙_Yeezy 350V2 Grey Orange 侃爷椰子350 灰橙 特价
- python解非线性规划问题_Python+Gurobi+Pulp解决线性规划问题
- 单循环赛贝格尔编排法实现
- Python中: unsupported format character ''' (0x27)
- 【数据挖掘】利用md5查找重复文件
- 测试普通话水平的软件,求测试普通话标准的软件?6款普通话软件推荐
- Kubernetes 集群基于 Rook 搭建 Ceph 分布式存储系统
- 学科实践活动感悟50字_学科实践活动写实记录50字范文
- android studio报错Error:Project with path 'XXXX' could not be found解决办法
热门文章
- 基于 OpenCV 和 OpenPose 的棒球挥杆人体姿势估计
- 点云及三维图像处理综述
- 云计算集成过程中七个关键性的问题
- Laravel之Eloquent ORM访问器调整器及属性转换
- NS_ASSUME_NONNULL_BEGIN 延伸
- Unity3d连接SQL Server数据库出现SocketException: 使用了与请求的协议不兼容的地址错误...
- Java中Queue和BlockingQueue的区别
- eplise怎么连接数据库_如何通过eclipse连接到mysql数据库
- 【Python自学】六个上手超强的学习工具,你值得有
- 【Java常识】6.0面向对象认知和Eclipse的实用使用、==号和equals方法的区别