多项式乘法(FFT)

news2025/1/20 7:23:36

https://www.luogu.com.cn/problem/P3803

  • 傅里叶变换(FFT)笔记存档
  • FFT代码上的实现细节

主函数

  1. 把长度设为2的整数次幂块
    在这里插入图片描述

  2. 初始进行翻转(二进制翻转)
    在这里插入图片描述

  3. 对A,B先化为点值(DFT)
    在这里插入图片描述

  4. 相乘

在这里插入图片描述

  1. IDFT

在这里插入图片描述

FFT函数

  1. 进行初始翻转:

在这里插入图片描述2. 枚举区间长度,并计算单位根

在这里插入图片描述

  1. 逐个枚举区间(哪个区间),每个区间内部也进行枚举
    在这里插入图片描述4. 区间内部进行分治合并

在这里插入图片描述

i i i:半块长

完整code

#include<bits/stdc++.h>
using namespace std;
#define int long long
inline int read(){int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;
ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<1)+
(x<<3)+(ch^48);ch=getchar();}return x*f;}
#define Z(x) (x)*(x)
#define pb push_back
//#define M
//#define mo
#define N 3000010
#define Pi acos(-1)
int n, m, i, j, k, T;
complex<double>a[N], b[N]; 
int r[N], l; 

void FFT(complex<double>*P, int op) {
	for(i=0; i<n; ++i) if(i<r[i]) swap(P[i], P[r[i]]); 
	for(i=1; i<n; i<<=1) { // 当前分治区间长度为 2i
		complex<double>W(cos(Pi/i), sin(Pi/i)*op); 
		for(j=0; j<n; j+=(i<<1)) { // 注意加的是区间长度,这一维枚举的是哪个区间 
			complex<double>w(1, 0); 
			for(k=0; k<i; ++k, w*=W) { //枚举每个区间内部 ,枚举到 i其实相当于只枚举了一半 
				complex<double>X=P[j+k], Y=w*P[j+k+i]; 
				P[j+k]=X+Y; P[j+k+i]=X-Y; //+i就是计数的情况 
			}
		}
	}
}

signed main()
{
//	freopen("in.txt", "r", stdin);
//	freopen("out.txt", "w", stdout);
//	srand(time(NULL));
//	T=read();
//	while(T--) {
//
//	}
	n=read(); m=read(); 
	for(i=0; i<=n; ++i) a[i]=read(); 
	for(i=0; i<=m; ++i) b[i]=read(); 
	m+=n; 
	for(n=1; n<=m; n<<=1) ++l; //++l不能写在for里面 
	for(i=0; i<n; ++i) r[i]=((r[i>>1]>>1)|((i&1)<<l-1)); //这个地方容易打错,要仔细分析 
	FFT(a, 1); FFT(b, 1);  
	for(i=0; i<n; ++i) a[i]*=b[i]; 
	FFT(a, -1); 
	for(i=0; i<=m; ++i) printf("%lld ", (int)(a[i].real()/n+0.5)); 
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/951230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

openGauss学习笔记-55 openGauss 高级特性-全密态数据库

文章目录 openGauss学习笔记-55 openGauss 高级特性-全密态数据库55.1 连接全密态数据库55.2 创建用户密钥55.3 创建加密表55.4 向加密表插入数据并进行查询 openGauss学习笔记-55 openGauss 高级特性-全密态数据库 全密态数据库意在解决数据全生命周期的隐私保护问题&#xf…

Maven - 依赖三大原则

文章目录 概述最短路径优先原则POM 文件中声明顺序优先原则覆盖优先原则 MAVEN 依赖冲突常见报错Maven 依赖加载流程 概述 Maven 是一个流行的构建工具&#xff0c;用于管理和构建Java项目。它遵循一些核心原则&#xff0c;以确保项目的构建和依赖管理能够高效、一致地进行。以…

在CMD脚本中生成空心字

背景 程序启动时&#xff0c;需要通过串口向外打印信息&#xff0c;想在信息最前面打印一个log&#xff0c;如下图所示&#xff1a; win自带的CMD安装pyfiglet 使用pip安装pyfiglet&#xff0c;如下&#xff1a; pip install pyfiglet安装成功后如下图&#xff1a; 运行以…

(数字图像处理MATLAB+Python)第十一章图像描述与分析-第一节、二节:图像描述概述和特征点

文章目录 一&#xff1a;图像描述概述&#xff08;1&#xff09;图像描述&#xff08;2&#xff09;描述子 二&#xff1a;特征点&#xff08;1&#xff09;Moravec角点检测A&#xff1a;原理B&#xff1a;程序 &#xff08;2&#xff09;Harris角点检测A&#xff1a;原理B&…

YII项目在Docker中运行缓慢

缓慢问题分析 请求YII的api时间请求原生查询时间win10 上运行docker上的php api异常慢ubuntu 中拉代码git报错 请求YII的api时间 请求原生查询时间 win10 上运行docker上的php api异常慢 链接阿里数据的 入口直接返回的 网上有说是docker的dns解析慢&#xff1b; 也有说是…

方面级别情感分析之四元组预测

情感四元组预测现有方法 阅读本文之前我们默认你对情感分析有基本的认识。 如果没有请阅读文章(https://tech.tcl.com/post/646efb5b4ba0e7a6a2da6476) 情感分析四元组预测涉及四个情感元素: 方面术语a&#xff0c;意见术语(也叫观点术语)o&#xff0c; 方面类别ac&#xff0c…

使用python对光谱数据进行lorentz峰值拟合

1、lorentz峰值拟合 发光光谱是一种用于表征二维半导体材料光学性质的重要技术&#xff0c;它可以反映出材料中的载流子密度、缺陷态、激子束缚能等信息。 由于二维半导体材料的厚度极其薄&#xff0c;其发光信号往往很弱&#xff0c;且受到基底、环境和测量设备等因素的干扰…

访问学者如何办理延期回国

近年来&#xff0c;随着国际交流的不断深入&#xff0c;越来越多的学者选择走出国门&#xff0c;到异国他乡进行访问学习。然而&#xff0c;有时由于研究项目进展或个人原因&#xff0c;访问学者可能需要延期回国。那么&#xff0c;访问学者在延期回国时应该如何办理手续呢&…

[Go版]算法通关村第十五关黄金——继续研究超大规模数据场景的问题

目录 题目&#xff1a;对20GB文件进行排序解决思路&#xff1a;外部排序 两两合并 题目&#xff1a;超大文本中搜索两个单词的最短距离解决思路&#xff1a;双指针法复杂度&#xff1a;时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1) 题目&#xff1a;从10亿数字…

ChatGPT AIGC 一个指令总结Python所有知识点

在ChatGPT中,直接输入一个指令就可以生成Python的所有知识点大纲。 非常实用的ChatGPT功能。 AIGC ChatGPT ,BI商业智能, 可视化Tableau, PowerBI, FineReport, 数据库Mysql Oracle, Office, Python ,ETL Excel 2021 实操,函数,图表,大屏可视化 案例实战 http://t.…

优秀产品经理的产品定位策略

产品定位是指在产品设计之初或在市场推广过程中&#xff0c;通过广告宣传等营销手段&#xff0c;使得产品在消费者心中确立具体形象的过程。这样有利于目标用户快速决策选择该产品。 如果没有明确的产品定位或产品定位模糊不清&#xff0c;目标用户对该产品印象不深刻&#xff…

干货丨软件测试行业迎来新时代,AI将成为主流技术?

随着科技日新月异的发展&#xff0c;人工智能正逐渐渗透到我们生活的各方各面&#xff0c;从智能语音助手到自动驾驶汽车、从智能家居到人脸识别技术&#xff0c;AI正以其卓越的智能和学习能力引领着新时代的发展方向。 在这个快速演进的时代中&#xff0c;软件测试领域也受到了…

STM32单片机示例:64位全局时间戳发生器

文章目录 目的基础说明测试代码总结示例链接 目的 STM32H743 / H750 系列的芯片有一个64位的全局时间戳发生器&#xff08; Global timestamp generator &#xff09;&#xff0c;这篇文章将对它的使用做个记录。 基础说明 全局时间戳发生器相关的内容可以参考官方参考手册&…

如何解决高并发中的I/O瓶颈?

我们都知道&#xff0c;在当前的大数据时代背景下&#xff0c;I/O的速度比内存要慢&#xff0c;尤其是性能问题与I/O相关的问题更加突出。 在许多应用场景中&#xff0c;I/O读写操作已经成为系统性能的一个重要瓶颈&#xff0c;这是不能忽视的。 什么是I/O&#xff1f; I/O作为…

基于RabbitMQ的模拟消息队列之四——内存管理

文章目录 一、设计数据结构二、管理集合1.交换机2.队列3.绑定4.消息5.队列上的消息6.待确认消息7.恢复数据 一、设计数据结构 针对交换机、队列、绑定、消息、待确认消息设计数据结构。 交换机集合 exchangeMap 数据结构&#xff1a;ConcurrentHashMap key:交换机name value:交…

视频剪辑高手揭秘:如何巧妙改变尺寸,打造完美画面

视频剪辑高手揭秘&#xff1a;如何巧妙改变尺寸&#xff0c;打造完美画面 在数字媒体时代&#xff0c;视频剪辑已经成为一项至关重要的技能。不仅在专业电影制作领域&#xff0c;也在个人创作和社交媒体传播中发挥着重要作用。本文将向你介绍一位视频剪辑高手&#xff0c;并揭…

NIO原理浅析(二)

IO分类 阻塞和非阻塞 阻塞IO&#xff1a;用户空间引发内核空间的系统调用&#xff0c;需要内核IO操作彻底完成之后&#xff0c;返回值才会返回到用户空间&#xff0c;执行用户的操作。阻塞指的用户空间程序的执行状态&#xff0c;用户空间程序需要等到IO操作彻底执行完毕。j…

《关键跨越:从业务高手到优秀主管》:最大化团队产出

作者&#xff1a;北森人才管理研究院 阅读时长&#xff1a;6小时21分钟 评分&#xff1a;5星 失控最鲜明的特征之一是管理者工作的时间越来越长&#xff0c;但结果越来越糟。很多新手管理者看到下属无法完成任务&#xff0c;或者担心出错&#xff0c;对下属不放心&#xff0c;出…

Linux学习之RAID删除

参考《Linux软件raid删除》 我部署 RAID的步骤在《Linux学习之RAID》 sudo umount /dev/md0先进行卸载。 sudo mdadm -S /dev/md0停止/dev/md0。 sudo mdadm -A -s /dev/md0可以重新开始/dev/md0&#xff0c;这里只是拓展一下。 sudo mdadm -S /dev/md0停止/dev/md0。 s…

Cesium 加载 geojson 文件并对文件中的属性值进行颜色设置

文章目录 需求分析解决 需求 Cesium 加载 geojson 文件并对文件中的属性值进行颜色设置 分析 在搜寻多种解决方案后&#xff0c;最后总结出 自己的解决方案 方案一&#xff0c;没看懂 var geojsonOptions {clampToGround : true //使数据贴地};var entities;promise Cesium…