快速傅里叶变换(FFT)
ωni​ 是一个单位根可以简单理解为 1xn1 的第 i 个解。由于虚数相乘就是长度相乘幅角相加所以单位根可以看作在一个单位圆分成的 n 等份每个在圆上对应的虚数。一次FFT操作我们可以得到至少 1n1 个点值表达以此来进行优化。我们假设我们要计算 s 个点值其中每个点对应的 xωsi​ 的话代入式子我们发现相隔一半总长的点也就是 ωsi​ 和 2ωsi2s​​ 所对应的值只是奇数次项的符号不一样。这就是对称性了。那么我们就可以考虑把奇数位和偶数位给分开继续分治下去每次所需要处理的位置都是一半那么最后只有 log⁡logn 层这样就能在 (log⁡)O(nlogn) 的时间复杂度内解决问题了。那么我们就能够快速得到这个多项式的 s 个点值了。然后考虑怎么才能够把这些点值重新变回多项式。这一部分也被称为快速傅里叶逆变换。推导过程比较复杂可以自己推。总而言之就是利用单位根的性质推导出结论。这边一般有两种处理方式我一般使用这种除了 00 的位置外其它位置翻转所有答案除以总长度。优化由于FFT需要大量三角函数、虚数、浮点数计算所以常数非常非常大所以往往需要一些卡常操作。第一个就是把分治操作改成迭代众所周知递归常数会比较大。第二个就是蝶形运算优化这一优化的意义在于我们每次会把奇数位和偶数位拆开然后合并非常麻烦蝴蝶优化帮我们提前把位置分配好了那么我们就不需要再去进行复杂的操作了。代码实现其实看别人推导一遍还是很容易的但是自己考场上也不可能去推那么就直接记住板子怎么敲吧。只要知道每一步都在干嘛还是很好记的。代码以HDU - 4609为例cpp#includebits/stdc.h #define int long long using namespace std; const double Piacos(-1); int T,n,a[400005],id[400005],c[400005]; complexdouble d[400005]; void FFT(complexdouble *a,int n,int op){ for(int i0;in;i)if(id[i]i)swap(a[id[i]],a[i]); for(int len2;lenn;len1){ complexdouble W(cos(2*Pi/len),sin(2*Pi/len)),w0(1,0); for(int l0;ln;llen){ complexdouble ww0; for(int il;il(len1);i,ww*W){ auto xa[i],ya[i(len1)]*w; a[i]xy,a[i(len1)]x-y; } } } if(op-1){ reverse(a1,an); for(int i0;in;i)a[i]/n; } } signed main(){ ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); cinT; while(T--){ cinn; int ma0; for(int i1;in;i)cina[i],d[a[i]]1.0,mamax(ma,a[i]); int s1,l0; while(s(ma1))s1,l; for(int i0;is;i)id[i](id[i1]1)|((i1)l-1); FFT(d,s,1); for(int i0;is;i)d[i]*d[i]; FFT(d,s,-1); for(int i0;is;i)c[i](int)(d[i].real()0.5); for(int i1;in;i)c[a[i]*2]--; for(int i0;is;i)c[i]1; for(int i1;is;i)c[i]c[i-1]; int ans0,sum0; for(int i1;in;i){ sum(i-1)*(i-2)/2; ansc[a[i]]; } for(int i0;is;i)c[i]0,d[i]complexdouble(0,0); for(int i0;ima;i)a[i]0; anssum-ans; coutfixedsetprecision(7)(1.0*ans/sum)endl; } return 0; }​数论变换NTT整体思想NTT 的整体思想和 FFT 是一致的唯一区别是 NTT 使用了原根代替单位根。这明显是有前提的就是要有模数否则也不会有原根。假设原根为 g模数为 P那么需要满足 (−1)modgn(P−1)i​modP 的结果两两不同。通常来讲常见的原根是 33最常见的模数就是经典常数 998244353998244353。然后我们把 gi 代入每一个点值表达代替 FFT 的单位根就可以得到一样的结果了。代码实现代码以洛谷 - P4721为例cpp#includebits/stdc.h #define int long long using namespace std; const int mod998244353; int n,g[400005],f[400005],id[400005],tmp[400005],tmp2[400005]; int ksm(int a,int b){ int s1,xa; while(b){ if(b1)ss*x%mod; xx*x%mod; b1; } return s; } void NTT(int *a,int n,int op){ for(int i0;in;i)if(id[i]i)swap(a[id[i]],a[i]); for(int len2;lenn;len1){ int Wksm(3,(mod-1)/len); for(int l0;ln;llen){ int w01; for(int il;il(len1);i,w0w0*W%mod){ int xa[i],ya[i(len1)]*w0%mod; a[i](xy)%mod,a[i(len1)](x-ymod)%mod; } } } if(op-1){ reverse(a1,an); int invksm(n,mod-2); for(int i0;in;i)a[i]a[i]*inv%mod; } } void solve(int l,int r){ if(lr)return;

相关新闻

电脑加密软件哪个好用?6 款公认好用的电脑加密软件推荐,最新排行

电脑加密软件哪个好用?6 款公认好用的电脑加密软件推荐,最新排行

不少上班族丢了电脑后文件全泄露,纠结电脑加密软件哪个好用 对比多款工具踩了不少坑。今天整理 6 款公认好用的电脑加密软件 这份最新排行经过实测,每款电脑加密软件防护能力在线,个人企业都能放心用。 一、安秉电脑加密软件 1、透明隐形加…

2026/7/2 4:58:50阅读更多 →
MTK闪光灯调校核心配置解析

MTK闪光灯调校核心配置解析

在 MTK 平台上,Camera Flashlight Tuning 的配置路径和关键参数与通用 Android 平台类似,但具有其特定的文件位置和配置方式。影响前后摄闪光灯亮度调节的核心部分主要集中在驱动层、HAL 层以及 MTK 特有的配置文件中。 MTK 平台闪光灯亮度调节核心配置…

2026/7/2 4:58:50阅读更多 →
读写分离——让数据库“分身有术“

读写分离——让数据库“分身有术“

读写分离——让数据库"分身有术" 你有没有做过"一心二用"的事? 生活场景:餐厅的分工 没有分工时 老板又当厨师,又当服务员: 客人点菜 → 老板去厨房做 菜做好了 → 老板端菜 客人要加水 → 老板放下锅铲去倒水 客人要结账 → 老板放下锅铲去收钱 老…

2026/7/2 4:58:50阅读更多 →
从零实现一个分布式文件系统:GFS的核心设计

从零实现一个分布式文件系统:GFS的核心设计

前言你有没有想过:Google是怎么存储EB级别的数据的?GFS(Google File System)是Google分布式存储的基石,支撑了搜索、YouTube、Gmail等所有服务。今天我们用C语言从零实现GFS的核心设计: Master(…

2026/7/2 6:33:58阅读更多 →
AI发展趋势-2

AI发展趋势-2

接上篇二、AI形态跃迁:从被动对话框→主动AI智能体Agent(未来3年最大风口)这是AI最本质的质变:传统AI是“你提问、它应答”的被动工具;Agent智能体是有目标、会拆解任务、自动调用软件/网页/API、自主执行、复盘迭代、…

2026/7/2 6:33:58阅读更多 →
谈谈长连接(Keep-Alive)在超大规模爬虫抓取中的性能差距

谈谈长连接(Keep-Alive)在超大规模爬虫抓取中的性能差距

大家好,欢迎回到我的技术专栏。在日均抓取量突破千万级别的爬虫场景里,连接管理是决定单机 QPS 和机器成本的关键因素。很多团队在初期用短连接跑得很顺,但当规模膨胀到某个临界点后,往往会发现加机器也拉不动了——此时的性能瓶颈…

2026/7/2 6:33:58阅读更多 →
终极Notepad++实时Markdown预览插件:5分钟实现高效文档创作

终极Notepad++实时Markdown预览插件:5分钟实现高效文档创作

终极Notepad实时Markdown预览插件:5分钟实现高效文档创作 【免费下载链接】MarkdownViewerPlusPlus A Notepad Plugin to view a Markdown file rendered on-the-fly 项目地址: https://gitcode.com/gh_mirrors/ma/MarkdownViewerPlusPlus 你是否厌倦了在Not…

2026/7/2 6:33:58阅读更多 →
SMT贴片为什么总出问题?关键工艺要求与避坑指南

SMT贴片为什么总出问题?关键工艺要求与避坑指南

很多硬件工程师都有过这样的经历:设计方案反复验证、打样测试全部通过,到了小批量试产却突然“翻车”——上电冒烟、时好时坏、Debug三天发现是某个BGA虚焊,或者一颗0402电阻立碑了。更让人头疼的是,明明参数没变、设备也正常&…

2026/7/2 6:33:58阅读更多 →
5步掌握网站监控神器:changedetection.io实战全攻略

5步掌握网站监控神器:changedetection.io实战全攻略

5步掌握网站监控神器:changedetection.io实战全攻略 【免费下载链接】changedetection.io Best and simplest tool for website change detection, web page monitoring, and website change alerts. Perfect for tracking content changes, price drops, restock a…

2026/7/2 6:28:58阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/1 4:42:14阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/1 5:19:01阅读更多 →
塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧

塞尔达传说旷野之息存档修改器:3分钟掌握海拉鲁世界自由定制技巧 【免费下载链接】BOTW-Save-Editor-GUI A Work in Progress Save Editor for BOTW 项目地址: https://gitcode.com/gh_mirrors/bo/BOTW-Save-Editor-GUI 想在《塞尔达传说:旷野之息…

2026/7/2 0:03:01阅读更多 →
告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

告别 AccessKey:多云平台 CLI OAuth 免密认证完全指南

在本地开发环境使用云厂商 CLI 时,传统的 AccessKey(AK)方式需要手动创建、下载和保管密钥,不仅繁琐,还存在泄漏风险。其实,主流云平台都已提供基于 OAuth 2.0 的免密认证方案,让开发者可以通过浏览器登录一次性完成授权,CLI 自动管理临时凭证的刷新,兼顾了便利与安全…

2026/7/2 0:03:01阅读更多 →
基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

基于13DOF传感器与PIC32MZ的高精度嵌入式导航系统设计

1. 项目背景与核心价值在嵌入式系统开发领域,高精度定位与导航一直是极具挑战性的技术方向。传统方案往往面临成本、精度和实时性难以兼顾的困境。这个项目通过13DOF(13自由度)传感器组合与PIC32MZ2048EFH100高性能MCU的协同工作,…

2026/7/2 0:03:01阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/2 0:33:58阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/2 1:32:11阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/2 1:50:13阅读更多 →