FFT NTT模板

Docker一键部署Synopsys EDA全家桶(VCS/Verdi 2018版)保姆级教程 本文提供了一份详尽的Docker容器化部署Synopsys EDA工具链(VCS/Verdi 2018版)的保姆级教程。通过环境隔离与标准化,解决传统安装的依赖冲突问题,并重点攻克了容器内GUI图形界面显示的核心难题。教程涵盖从Docker基础安装、镜像获取、容器启动配置,到使用X11转发或VNC实现Verdi完美显示的完整实践,旨在帮助芯片设计工程师快速构建稳定、可移植的一键化EDA工作环境。 阅读详情

原题链接https://www.luogu.com.cn/problem/P3803

FFT

#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const int maxn = 1e6 + 10;
const int mod = 1e9 + 7;
const double pi = acos(-1);

struct com {
    double x, y;

    com(double x1 = 0, double y1 = 0) {
        x = x1, y = y1;
    }
};

com operator+(com a, com b) {
    return com(a.x + b.x, a.y + b.y);
}

com operator-(com a, com b) {
    return com(a.x - b.x, a.y - b.y);
}

com operator*(com a, com b) {
    return com(a.x * b.x - a.y * b.y, a.x * b.y + a.y * b.x);
}

namespace FFT {
    int tot, digit, rev[maxn << 2];
    com a[maxn << 2], b[maxn << 2];

    void init(int len) {
        tot = 1, digit = 0;
        while (tot <= len) {
            tot <<= 1, digit++;
        }
        for (int i = 0; i < tot; ++i) {
            rev[i] = (rev[i >> 1] >> 1) | (i & 1) << (digit - 1);
        }
    }

    void fft(com *A, int f) {
        for (int i = 0; i < tot; ++i) {
            if (i < rev[i]) swap(A[i], A[rev[i]]);
        }
        for (int mid = 1; mid < tot; mid <<= 1) {
            com w1 = com(cos(pi / mid), f * sin(pi / mid));
            int len = mid * 2;
            for (int p = 0; p < tot; p += len) {
                com wk = com(1, 0);
                for (int k = 0; k < mid; ++k) {
                    com x = A[p + k], y = wk * A[p + k + mid];
                    A[p + k] = x + y;
                    A[p + k + mid] = x - y;
                    wk = wk * w1;
                }
            }
        }
        if (f == -1) {
            for (int i = 0; i < tot; ++i) {
                A[i].x = (int) (A[i].x / tot + 0.5);
            }
        }
    }

    void calc() {
        fft(a, 1);
        fft(b, 1);
        for (int i = 0; i < tot; ++i) {
            a[i] = a[i] * b[i];
        }
        fft(a, -1);
    }

};
using namespace FFT;

int main() {

    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i <= n; ++i) {
        scanf("%lf", &a[i].x);
    }
    for (int i = 0; i <= m; ++i) {
        scanf("%lf", &b[i].x);
    }
    init(n + m);
    calc();
    for (int i = 0; i <= n + m; i++) {
        printf("%.0lf%c", a[i].x, i == n + m ? 10 : 32);
    }
    return 0;
}

NTT

#include <bits/stdc++.h>

using ll = long long;
using namespace std;

const int maxn = 1e6 + 10;

int qmi(int a, int b, int mod) {
    int res = 1;
    while (b) {
        if (b & 1) res = 1ll * res * a % mod;
        a = 1ll * a * a % mod;
        b >>= 1;
    }
    return res;
}

namespace NTT {
    const int G = 3, P = 998244353, GI = 332748118;
    int tot, digit, rev[maxn << 2];
    int a[maxn << 2], b[maxn << 2];

    void init(int len) {
        tot = 1, digit = 0;
        while (tot <= len) {
            tot <<= 1, digit++;
        }
        for (int i = 0; i < tot; ++i) {
            rev[i] = (rev[i >> 1] >> 1) | (i & 1) << (digit - 1);
//            a[i] = 0, b[i] = 0;
        }
    }

    void ntt(int *A, int f) {
        for (int i = 0; i < tot; ++i) {
            if (i < rev[i]) swap(A[i], A[rev[i]]);
        }
        for (int mid = 1; mid < tot; mid <<= 1) {
            int w1, len = mid * 2;
            if (f == 1) w1 = qmi(G, (P - 1) / len, P);
            else w1 = qmi(GI, (P - 1) / len, P);
            for (int p = 0; p < tot; p += len) {
                int wk = 1;
                for (int k = 0; k < mid; ++k) {
                    int x = A[p + k], y = 1ll * wk * A[p + k + mid] % P;
                    A[p + k] = (1ll * x + y) % P;
                    A[p + k + mid] = (1ll * x - y + P) % P;
                    wk = 1ll * wk * w1 % P;
                }
            }
        }
        if (f == -1) {
            int invp = qmi(tot, P - 2, P);
            for (int i = 0; i < tot; ++i) {
                a[i] = 1ll * a[i] * invp % P;
            }
        }
    }

    void calc() {
        ntt(a, 1), ntt(b, 1);
        for (int i = 0; i < tot; ++i) {
            a[i] = 1ll * a[i] * b[i] % P;
        }
        ntt(a, -1);
    }

};
using namespace NTT;


int main() {

    int n, m;


    scanf("%d%d", &n, &m);
    init(n + m);
    for (int i = 0; i <= n; ++i) {
        scanf("%d", &a[i]);
    }
    for (int i = 0; i <= m; ++i) {
        scanf("%d", &b[i]);
    }


    calc();
    for (int i = 0; i <= n + m; i++) {
        printf("%d%c", a[i], i == n + m ? 10 : 32);
    }
    return 0;
}
Python爬虫实战:利用Playwright和反反爬技术高效抓取Bloomberg金融数据 用户行为分析(鼠标移动、点击模式)请求头检测IP频率限制WebSocket通信验证Canvas指纹识别我们的爬虫需要模拟人类行为,使用代理IP池,并合理控制请求频率。 阅读详情

相关推荐

Proteus 8.17安装部署全指南:避坑、汉化与STM32库配置

Proteus是一款广泛用于单片机仿真与电路设计的EDA工具,其核心价值在于支持嵌入式系统原型验证与教学实践。Proteus 8.17版本重构了许可证机制(LIC Engine)、依赖环境(VC++ 2019/NET 4.8)及路径加载逻辑,导致传统安装方法失效。掌握正确安装部署流程,是保障原理图绘制、VSM仿真(如51/STM32/ESP32)及外设波形观测(OLED、SPI、ADC)稳定运行的前提。本文聚焦Windows平台下零失败安装路径选择、权限配置、汉化实施与高频器件(如STM32F103)元件库

weixin_33377602的博客 402

FFT/NTT模板

模板题,多项式乘法 题目链接 0 1 2 a[0] - a[2] X a b c b[0] - b[2] ________________ 0c 1c 2c 0b 1b 2...

蒟蒻 lxw的博客 306

AI应用架构师:引领半导体良率AI预测的变革浪潮

在半导体行业这个技术密集、资本密集且竞争异常激烈的领域,良率是决定企业盈利能力的关键指标。每提升1%的良率可能意味着数亿美元的利润增长。然而,随着制程节点不断缩小至3nm、2nm甚至更先进水平,传统的良率管理方法已难以应对日益复杂的制造流程和指数级增长的数据量。本文将深入探讨AI应用架构师如何成为这场变革的核心驱动力,通过设计和实施先进的AI预测系统,将半导体良率预测从传统的"事后分析"转变为"事前预测"和"实时优化"。

AI大模型应用之禅 403

P3803 【模板】多项式乘法 ——FFT/NTT模板

>>>FFT >>>NTT 要点: ①A(x) = A1(x)+ wnk*A2(x) A(x+n/2) = A1(x)-wnk*A2(x) ②单位圆的两个复数相乘得到的是角度相加后单位圆上对应的复数(模长相乘,极角相加) ③重新转回系数表示,FFT用的是共轭复数,最后还要除以问题的规模 NTT用的是规模的逆元 ④NTT每个规模n下对应的一单...

shadiao.的博客 661

超详细 Git创建仓库及上传项目至Github操作(Windows系统)

文章目录前言一、Git下载及安装二、创建代码仓库1.配置身份2.创建本地仓库3.提交本地代码三、使用Git上传代码至Github1.创建ssh keys2.在Github中新建仓库3.关联本地仓库与Github仓库4.推送代码至Github仓库总结 前言 本文对于Windows系统上git的安装及基本使用方法进行简单介绍,并介绍如何使用git将仓库中的项目上传至个人的Github中去。内容参考《第一行代码》以及一些博客。 本文适合新手阅读哦~ 一、Git下载及安装 打开网站 git下载 下载安装包(直接

lijianyi0219的博客 2万+

树莓派5首次开机保姆级教程(无显示器通过VNC连接树莓派桌面)

选择 Interface Options > VNC > Yes 启用服务。2.在Windows电脑上安装VNC软件。重启树莓派:sudo reboot。3.使用VNC远程访问树莓派桌面。

qq_34184505的博客 2350

FFT与NTT的模板

网上相关博客不少,这里给自己留个带点注释的模板,以后要是忘了作提醒用。 以洛谷3803多项式乘法裸题为例。 FFT: 1 #include <cstdio> 2 #include <cmath> 3 #include <cctype> 4 #include <algorithm> 5 #define ri ...

173

PX4飞控CAN总线通信深度配置:从menuconfig到驱动加载的完整指南

本文详细解析了PX4飞控中CAN总线通信的深度配置流程,从menuconfig选项设置到驱动加载的完整指南。涵盖硬件抽象层、驱动层和应用层的配置细节,提供实际验证方法和故障排查技巧,帮助开发者高效实现CAN通信,特别适用于无人机和机器人底盘运动控制等场景。

weixin_30374009的博客 501

FFT模板+NTT模板

嫖的模板,原理未知,用于多项式乘法。 将a多项式的系数赋值给a[i].x,b多项式的系数赋值给b[i].x然后solve(n,m)即可。 #include<iostream> #include<cstdio> #include<cmath> using namespace std; const int MAX_N=10100000; const double Pi=acos(-1.0); inline int read(){ char c=getchar();

EDGiboy的博客 342

ICP-10111气压传感器原理图设计,已量产(压力传感器)

在最近的室内导航定位项目中,我们需要一款能捕捉厘米级垂直高度变化的气压传感器 —— 毕竟室内环境里,哪怕是单个台阶的高度差都得精准识别。对比了几款器件后,最终选定了 ICP-10111:它 ±1Pa 的压差精度刚好能把高度差分辨到 8.5cm,0.4Pa 的低压力噪声能让数据输出足够稳定,再加上 0.5Pa/℃的低温漂特性,长期工作的可靠性也能满足需求。下面聊聊这套适配 ICP-10111 的硬件电路设计细节。

不脱发的程序猿 334

79、昇腾系列服务器/昇腾系列推理卡/昇腾系列嵌入式开发板+Dify+one api部署DeepSeek-R1-Distill-Qwen-32BW8A8+RAG本地模型知识库和负载均衡双实例

阶段,安装过程缺什么,,在docker外面git下源码,进入容器内部进行量化,这里的容器建议在创建个8卡的容器,双卡容器量化会显示npu显存不够,除非你用cpu转模型,我就懒得创建容器了,使用cpu量化吧,巨慢;创建容器,进入容器,计划使用两张昇腾NPU卡推理DeepSeek-R1-Distill-Qwen-32B的W8A8模型,所以构建的容器用两张卡,选6、7卡吧,0-6号卡可以跑文本嵌入模型、重排序模型;直接进入量化阶段,在容器外面操作即可,环境不用管,因为系统已经默认配置了环境,直接跳到。

sxj731533730 6121

FFT、NTT模板

快速傅里叶基础知识FFT进行多项式乘法的步骤P3803 【模板】多项式乘法(FFT) 基础知识 离散傅里叶(DFT)和逆变换(IDFT)时间复杂度都是O(n2)O(n^2)O(n2) 快速傅里叶(FFT)时间复杂度为O(nlog2n)O(nlog_2n)O(nlog2​n) 推导过程: 设A(x)=a0+a1x+a2x2+⋯+anxnA(x)=a_0+a_1x+a_2x^2+\dots+a_{n}x^nA(x)=a0​+a1​x+a2​x2+⋯+an​xn,假设n为偶数,根据奇偶性分为: A(x)=(a

cheng__yu_的博客 219

【Proteus仿真】基于AT89C51单片机的单片机双向通信

本文介绍了基于AT89C51单片机实现双向通信的系统设计。系统采用MAX232芯片实现TTL与RS-232电平转换,通过CONN-D9F接口建立串行通信连接。甲机程序通过按键控制发送不同指令字符,同时接收乙机数据驱动数码管显示;乙机程序根据接收指令控制LED显示状态,并可发送0-10数字至甲机。文中详细说明了MAX232电平转换原理、DB9接口定义,以及完整的单片机控制程序代码,包括串口初始化、数据收发处理等关键功能实现,为嵌入式系统串口通信开发提供了实用参考方案。

XU157303764的博客 1094

FFT NTT 模板

NTT: #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #define N 2000050 #define ll long long #define MOD 998244353 template<typename T&gt...

weixin_30753873的博客 101

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

FFT及NTT模板

FFT其中2ce=len2^{ce}=lenvoid DFT(node *a,int sig){ fo(i,0,len-1){ int p=0; for(int j=0,tp=i;j<ce;j++,tp/=2) p=(p<<1)+(tp%2); tt[p]=a[i]; } for(int m=2;m<=len;m*=2){

不来也不去的一只失忆蝴蝶 1870

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

FFT/NTT/FWT模板

  非递归版FFT 源自快速傅里叶变换(FFT)详解 #pragma GCC optimize(2) #pragma GCC optimize(3) #pragma GCC optimize(4) #include&lt;bits/stdc++.h&gt; using namespace std; typedef long long ll; const int maxn=5e6+5; in...

喵喵喵? 507

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

分治FFT/NTT 模板

题目要我们求$f[i]=\sum\limits_{j=1}^{i}f[i-j]g[j]\;mod\;998244353$ 直接上$NTT$肯定是不行的,我们不能利用尚未求得的项卷积 所以要用$CDQ$分治,先递归$[l,mid]$,然后处理$[l,mid]$对$[mid+1,r]$的影响,再递归$[mid+1,r]$ 当我们处理$[l,mid]$对$[mid+1,r]$的影响时,$f[i](...

weixin_30834783的博客 186

抄的 FFT 和 NTT 模板

洛谷P1919 :https://www.luogu.org/problem/P1919 FFT : #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> const int N=1e6+10; const double Pi=acos(-1.0); st...

StarrYooSkY的博客 292

[UOJ34]FFT && NTT 模板

到底为什么这么慢啊 FFT #include #include #include #include #include #define SF scanf #define PF printf using namespace std; typedef long long LL; inline int read() { int x = 0, f = 1; char ch = getchar();

shiyukun1998的专栏 1357

FFT / NTT 快速傅里叶/数论变换模板 / P3803

FFT是很优美的一个方法,可以解决多项式中的许多问题,下面给出非递归的代码模板,用到了二进制位逆序变换、蝴蝶操作

m0_54646258的博客 231

luoguP4721 【模板】分治 FFT (分治NTT)

给定 $g[1....n-1]$,求 $f[0],f[1],...,f[n-1]$,其中 $f[i]=\sum_{j=1}^{i}f[i-j]g[j]$ 变界为 $f[0]=1$ 答案模 998244353 分治 $FFT$:类似 $CDQ$ 分治,先处理左边,再处理左对右的贡献 假设当前的区间为 $[l,r]$,已经处理完 $[l,mid]$ 的所有 $f$ 值...

weixin_30247307的博客 134

【学习小结】FFT、NTT模板和原理

FFT、NTT原理 from zhouzhendong 很好的总结 from coco_T 模板 namespace fft { int base = 1; poly rev = {0, 1}; vector<Complex> roots = {Complex(1,0),Complex(1,0)}; void ensure_base(int nbase) { //所有dft需要的预...

执子之手,与子偕老 630

FFT & NTT 学习 模板

参考资料: 算导第 30 章 http://www.gatevin.moe/acm/fft%E7%AE%97%E6%B3%95%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/ http://blog.youkuaiyun.com/acdreamers/article/details/39026505 先来两道裸的 hdu 1402 (DFT)

kkkkahlua的博客 329

P4721-[模板]分治FFT【NTT,分治】

正题 题目链接:https://www.luogu.com.cn/problem/P4721 题目大意 给出序列ggg,然后f0=1f_0=1f0​=1 fi=∑j=1ifi−jgjf_{i}=\sum_{j=1}^if_{i-j}g_jfi​=j=1∑i​fi−j​gj​ 求序列fff 解题思路 使用分治后用NTTNTTNTT计算前区间对后区间的贡献即可。 时间复杂度O(nlog⁡2n)O(...

QuantAsk 690

【学习笔记】超简单的快速数论变换(NTT)(FFT的优化)(含全套证明)

整理的算法模板合集: ACM模板 目录一、前置知识二、快速数论变换(NTT)三、NTT证明(和FFT的关系)四、NTT模板 点我看多项式全家桶(●’◡’●)(全家桶还没写完,待更链接hhh ) 一、前置知识 快速傅里叶变换FTT(学完FFT再看NTT哈,) 原根(链接待更,下面有原根的基础说明,足够今天的NTT使用了) 二、快速数论变换(NTT) 三、NTT证明(和FFT的关系) 我们发现FFT里的大多操作,都跟单位根没有什么关系,(例如选点插值,奇偶分治),我们随便选择一个n个点v,v2

繁凡さん的博客 6454

FFT/NTT总结+洛谷P3803 【模板】多项式乘法(FFT)(FFT/NTT)

前言 众所周知,这两个东西都是用来算多项式乘法的。 对于这种常人思维难以理解的东西,就少些理解,多背板子吧! 因此只总结一下思路和代码,什么概念和推式子就靠巨佬们吧 推荐自为风月马前卒巨佬的概念和定理都非常到位的总结 推荐ppl巨佬的简明易懂的总结 FFT 多项式乘法的蹊径——点值表示法 一般我们把两个长度为\(n\)的多项式乘起来,就类似于做竖式乘法,一位一位地乘再加到对应位上,是\(...

a83229442的博客 365
上一篇: 求最小交换次数
下一篇: [ARC080F] Prime Flip
liamaking
博客等级 码龄7年 97粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值