小圆前辈的素数——FFT

2024年最新FFT算法讲解——麻麻我终于会FFT了!,2024年最新面试一路绿灯Offer拿到手软 n1S={p1​,p2​,…,pn+1​},对fXf(X)f(X)分别求值得到fp1fp2fpn1f(p1​),f(p2​),…,f(pn+1​),那么称AXp1fp1p2fp2pn1fpn1A(X)={(p1​,f(p1​)),(p2​,f(p2​)),…,(pn+1​,f(pn+1​))}为多项式fXf(X)f(X)在SSS下的点值表示法可以把多项式想象成一个nnn次函数,点值表示法就是取SS。 阅读详情

题目大意

给你两组数第一组 nnn 个, 第二组 mmm 个,在第一组数中选一个数,第二组数中选一个数,问你这两个数之和是素数有多少种选法

解题思路

暴力的方法:

遍历第一组,然后遍历第二组,进行判断,复杂度 O(n∗m)O(n * m)O(n∗m) 对于数据量大于 10510^5105 的问题显然无法解决。

FFT:

我们用两个桶来记录第一二组数,然后对两个桶进行FFT
A(x)=xa1+xa2+xa3......xanB(x)=xb1+xb2+xb3......xbmA(x) = x^{a_1} + x^{a_2} + x^{a_3} ...... x^{a_n} \\ B(x) = x^{b_1} + x^{b_2} + x^{b_3} ...... x^{b_m}A(x)=xa1​+xa2​+xa3​......xan​B(x)=xb1​+xb2​+xb3​......xbm​
​则对于 C=A+BC = A + BC=A+B ,转化为 C(x)=A(x)∗B(x)C(x) = A(x) * B(x)C(x)=A(x)∗B(x)
C(x)=A(x)∗B(x)=∑∀(i,j)∈[1,1]×[n,m]xai+bjC(x) = A(x)*B(x) =\sum _{\forall (i,j) \in [1,1] \times [n,m]} x^{a_i + b_j}C(x)=A(x)∗B(x)=∑∀(i,j)∈[1,1]×[n,m]​xai​+bj​

因此,我们只要将一个多项式中的 xan和xbmx^{a_n} 和 x^{b_m}xan​和xbm​的系数赋值为 1 ,其他赋值为 0。进行一遍FFT后,检验 xkx^kxk的系数,若 xkx^kxk 的系数大于等于 1 ,则 k∈Ck \in Ck∈C。
这样我们就可以在 O(nlogn)O(nlogn)O(nlogn) 的时间内算出两组数中任意两个数之和出现的次数。
然后我们筛一遍素数,就可以得到答案了。

Code

#include <bits/stdc++.h>
#define ll long long
#define qc ios::sync_with_stdio(false); cin.tie(0);cout.tie(0)
#define fi first
#define se second
#define PII pair<int, int>
#define PLL pair<ll, ll>
#define pb push_back
using namespace std;
const int MAXN = 3e5 + 7;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
    while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
    return x*f;
}
bool cheak[MAXN];//素数为false 
int prime[MAXN];//存第i个素数的值 
int cnt;//素数个数
void Prime()
{
	for(int i = 2; i < MAXN; i++)
	{
		if(!cheak[i]){
			prime[++cnt] = i;
		}
			for(int j=1;j<=cnt&&i*prime[j]<MAXN;j++){
				cheak[i*prime[j]] =true;
				if(i*prime[j] == 0)
				break;
			}
	}
}
const double PI = acos(-1.0);
struct Complex
{
    double x, y;
    Complex operator+(const Complex &W) const
    {
        return {x + W.x, y + W.y};
    }
    Complex operator-(const Complex &W) const
    {
        return {x - W.x, y - W.y};
    }
    Complex operator*(const Complex &W) const
    {
        return {x * W.x - y * W.y, x * W.y + y * W.x};
    }
};
int n, m;
Complex a[MAXN], b[MAXN];
int R[MAXN];
int tot, bit;
void inif(int n)
{
    tot = 1, bit = 0;
    while (tot <= n)
        tot <<= 1, ++bit;
    for (int i = 0; i <= tot; ++i)
        R[i] = (R[i >> 1] >> 1) | ((i & 1) << (bit - 1));
}
void FFT(Complex f[], int total, int type, int n, int m)
{
    for (int i = 0; i < total; ++i)
        if (i < R[i])
            swap(f[i], f[R[i]]);
    for (int tot = 2; tot <= total; tot <<= 1)
    {
        Complex w1 = {cos(2 * PI / tot), type * sin(2 * PI / tot)};
        for (int pos = 0; pos < total; pos += tot)
        {
            Complex w = {1, 0};
            for (int i = pos; i < pos + tot / 2; ++i, w = w * w1)
            {
                Complex x = f[i];
                Complex y = w * f[i + tot / 2];
                f[i] = x + y;
                f[i + tot / 2] = x - y;
            }
        }
    }
    if (type == -1)
    {
        for (int i = 0; i <= n + m; ++i)
            f[i].x = (ll)(f[i].x / tot + 0.5);
    }
}
void solve(){
    cin >> n >> m;
    
    int maxx1 = 0, maxx2 = 0;
    for(int i = 1; i <= n; i++){
    	int x;
    	cin >> x;
    	a[x].x++;
    	maxx1 = max(maxx1, x);
    } 
    for(int i = 1; i <= m; i++){
    	int x;
    	cin >> x;
    	b[x].x++;
    	maxx2 = max(maxx2, x);
    }
    inif(maxx2 + maxx1);
    FFT(a, tot, 1, maxx1, maxx2), FFT(b, tot, 1, maxx1, maxx2);
    for (int i = 0; i < tot; ++i)
        a[i] = a[i] * b[i];
    FFT(a, tot, -1, maxx1, maxx2);
	ll ans = 0;
	for(int i = 1; i <= cnt && prime[i] <= maxx1 + maxx2; i++) {
		ans += a[prime[i]].x;
	}
	cout << ans << endl; 
	for(int i = 0; i <= tot; i++)
    	a[i].x = a[i].y = b[i].x = b[i].y = 0;
}

int main()
{
	#ifdef ONLINE_JUDGE
    #else
       freopen("in.txt", "r", stdin);
       freopen("out.txt", "w", stdout);
    #endif
       Prime();
	qc;
    int T;
    cin >> T;
    while(T--){

        solve();
    }
	return 0;
}
图像傅里叶变换实战:从频谱可视化到边缘本质理解 图像傅里叶变换是连接空间结构与频率特性的核心桥梁,其原理在于将像素矩阵分解为不同空间频率的正弦波叠加;通过FFT实现从空间域到频率域的映射,高频成分对应边缘、纹理与噪声,低频成分表征平滑区域与整体亮度;该技术为边缘检测、图像去噪和卷积神经网络可解释性提供底层支撑;典型应用场景包括条纹图频谱分析、低通滤波器设计及频域滤波调试;本文聚焦NumPy+OpenCV工程实践,覆盖fft2、fftshift、对数缩放与窗函数等关键环节,帮助读者真正看懂频谱图中的‘结构密码’。 阅读详情

相关推荐

Matlab图像处理实战:从实验室到工业产线的七层过滤方法

图像处理是将原始图像转化为可靠决策输入的基础技术,其核心在于理解噪声来源、光照特性与目标物理形态,并通过数学工具实现像素级精准调控。Matlab图像处理工具箱提供从`imnoise`模拟到`regionprops`分析的完整链路,但真实场景要求超越教科书式调参——需结合CMOS热噪声分布、LED频闪频谱、运动模糊PSF等物理先验选择滤波策略;同时依托`adapthisteq`、`imbinarize('adaptive')`、`strel`定制等工程化手段,实现光照校正、动态二值化与形态学精修。该技术广泛应

weixin_30562507的博客 401

基2FFT的matlab实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。 提示:以下是本篇文章正文内容,下面案例可供参考 一、pandas是什么? 示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。 二、使用步骤 1.引入库 代.

qq_42757190的博客 6269

探索快速傅里叶变换的算法与应用

本文深入探讨了快速傅里叶变换(FFT)及其相关算法,涵盖了威诺格拉德傅里叶变换算法、离散傅里叶变换(DFT)矩阵的稀疏分解、统一离散傅里叶-哈特利变换(UDFHT)以及Bluestein FFT算法等。这些算法的核心目的是减少计算复杂度、降低内存需求,并适用于特定应用需求。通过理论推导与实际案例相结合,文章对各种算法进行了详细的分析和讨论,揭示了它们在信号处理、图像处理和数据压缩等领域的广泛应用。

weixin_29025501的博客 408

FFT用到的各种素数

int MOD; inline int mul(int a, int b){ return (long long)a * b % MOD; } int power(int a, int b){ int ret = 1; for (int t = a; b; b >>= 1){ if (b & 1)ret = m...

weixin_30291791的博客 309

TensorRT(C++)部署 Pytorch模型

众所周知,python训练pytorch模型得到.pt模型。但在实际项目应用中,特别是嵌入式端部署时,受限于语言、硬件算力等因素,往往需要优化部署,而tensorRT是最常用的一种方式。本文以yolov5的部署为例,说明模型部署在x86架构上的电脑端的流程。(部署在Arm架构的嵌入式端的流程类似)。

女神sha手的博客 5403

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

用Origin快速拟合荧光寿命、PL Decay (TRPL)数据分析处理

A20802013的博客 2万+

小圆前辈的素数(FFT)

题目链接:https://ac.nowcoder.com/acm/contest/15332/B 题目大意: 给了两个数组a和b,任意从a中取一个数a[i]和b数组中取一个数b[i],求满足a[i] + b[i]是素数的取法有多少种?数组长度 <= 1e5 示例: a = {1, 2, 2} b = {3, 4, 6} 满足条件的答案有四种: {1, 4}, {1, 6}, {2, 3}, {2, 3} 解答: 朴素的两重暴力枚举时间复杂度是O(N^2)无法AC本题。 我们

dezhonger的专栏 295

Windows 下 Hermes Agent(爱马仕)安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Hermes Agent(爱马仕) 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Hermes Agent 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 步骤一 安装WSL环境 2.2 步骤二 安装Python环境 2.3 步骤三 安装Hermes Agent 2.4 步骤四 修正 API Key 错误 2.5 步骤五 配置多个模型 2.6 步骤六 启动Hermes Agent 3. 常见问题及解决方案 4. 总结

weixin_43178406的博客 14万+

长沙学院2021校赛 B.小圆前辈的素数(FFT)

传送门:https://ac.nowcoder.com/acm/contest/15332/B 年轻人第一道fft题,特此纪念。 #if __has_include(<bits/stdc++.h>) #include<bits/stdc++.h> #endif #include<iostream> #include<bitset> #include<map> #include<vector> #include<unordered_

m0_52639539的博客 203

python实现边缘检测Canny算子 (附完整源码)

python实现边缘检测Canny算子 (附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 456

【Bug已解决】Claude Team Plan 购买席位报错 Payment failed 解决方案

方案适用场景推荐指数检查账单历史状态排查的第一步⭐⭐⭐⭐⭐更换支付方式类型快速尝试是否能绕开问题⭐⭐⭐联系官方支持团队最终解决问题的正规渠道⭐⭐⭐⭐⭐临时过渡方案紧急用人需求的应急处理⭐⭐⭐关注官方修复进度确认属于系统性缺陷的场景⭐⭐⭐⭐Claude Team Plan 增购席位报的问题,社区反馈和实际排查表明很大概率属于平台计费系统在处理按比例分摊费用这类复杂计算链路时的系统性缺陷,而不是用户自身的支付信息填写有误。先排除自身账单历史是否存在异常。

一键难忘的博客 4177

长沙学院2021校赛

长沙学院2021校赛 长沙学院2021校赛长沙学院2021校赛一、小圆前辈去上学1.题目2.解题思路3.参考代码二、小圆前辈的素数1.题目2.解题思路三、小圆前辈去爬山1.题目四、小圆前辈的魔法1.题目2.解题思路3.参考代码五、小圆前辈的排列组合1.题目2.解题思路3.参考代码总结 一、小圆前辈去上学 1.题目 链接:https://ac.nowcoder.com/acm/contest/15332/A 来源:牛客网 题目描述: 小圆前辈刚上小学一年级,开学第一天老师就讲了对于小数如何四舍五入成整数。 例

qq_54484765的博客 293

【ARM AMBA5 CHI 2 -- CHI 链路层详细介绍 】

目前有六个版本的 CHI 协议,CHI-A 是 CHI 协议的第一个版本。它提供了一个传输层,具有减少拥塞的功能。新通道、CHI 术语和组件命名的定义;请求、监听过滤器和缓存状态转换的示例;事务排序、独占访问和分布式虚拟内存(DVM)操作的规则;CHI-B 问题扩展了 CHI-A,但不能直接向后兼容 CHI-A。更大的物理地址宽度;原子事务;DVM 的 VMID 扩展;通道字段、事务结构和可靠性、可用性和可维护性(RAS)特性的描述;

CodingCos的博客 2535

周总结2022.1.10-2022.1.16

数据库是无法得出结论的。——《冰菓》福部里志

xhyu61的博客 809

DeepSeek + 微信:手把手教你把 AI 接入个人微信,秒变“高情商”聊天助手(防封指南)

将 DeepSeek 接入微信,本质上是给你的微信装了一个**“最强外挂”**。它不仅能帮你回消息,还能帮你写周报、查资料、甚至陪聊解闷。工具是服务于人的,不要让 AI 完全替代了你的真情实感。毕竟,真正的高情商,是屏幕背后那个在乎对方的你。先申请一个小号,按照步骤跑通流程。然后试着调整 Prompt,训练一个属于你自己的“嘴替”吧!

BUG猿的博客 957

从数据到行动:客服运营必分析的8大核心维度

服务运营正从被动响应升级为数据驱动型战略体系。客服中心的海量交互数据能精准反映服务效能、客户体验及运营短板,关键在于实现数据的可视化与可操作化。本文系统剖析了八类核心数据指标:1)客户行为数据(CSAT/NPS/投诉内容);2)通话效率指标(AHT/接通率);3)服务质量(质检体系/情绪识别);4)坐席绩效(FCR/客户评价);5)流程与知识库(转接率/工单时效);6)渠道流量分析;7)异常预警机制;8)成本收益模型。通过构建多维数据分析体系,企业可在客户全生命周期管理中实现服务升级、风险防控与资源

2202_75469062的博客 1400

2021牛客多校第一场H

题意:给你 n nn 个数,找出一个数 x xx(可以不在这些数之中),让这 n nn 个数对 x xx 取模互不相等 先学fft:十分简明易懂的FFT(快速傅里叶变换)_路人黑的纸巾-优快云博客_fft B站有个视频我觉得讲的不错:快速傅里叶变换(FFT)——有史以来最巧妙的算法?_哔哩哔哩_bilibili 代码: #include <bits/stdc++.h> using namespace std; const int N = 5000010; const double P

Gone_Summer的博客 148

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

[置顶]【算法教程合集】

又又实在是太懒啦!!! 自己写学习笔记?不存在的。。。 在这里总结一下OI的一些教程(已分类)。 基础算法 离线算法 数据结构 线性结构 偏序维护 Math 数论 组合计数 置换群 多项式 从多项式乘法到快速傅里叶变换(FFT &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp; NTT &amp;amp;amp;amp;amp;amp;amp;

又又大柚纸的博客 1305

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

acm数论(数学)学习

总结?我又没学完,怎么总结的完,只能总结自己学过的

Tan_JX 872

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

洛谷模板题单

来自:https://www.luogu.org/blog/da32s1da/mu-ban 模板题: P1082 同余方程 P1177 快排 P1439 最长公共子序列 P1452 凸包直径(旋转卡壳) P1531 区间求最值 P1595 伯努利错装信封问题 P1742 最小圆覆盖问题 P1908 逆序对 P1939 矩阵加速(数列) P2197 nim游戏 P2483 k短路 P24...

ShineEternal的笔记小屋 1042

信息学竞赛知识点整理

这个东西没用~~ 数据结构: 基础数据结构:链表、树、图的存储和遍历 栈和队列的应用 差分数组 二叉堆 并查集(按秩合并、带权并查集、拆点) 单调队列 单调栈 哈希表 映射 集合 优先队列 中级数据结构:RMQ(ST算法、RMQ标准算法、约束RMQ) 树状数组 线段树 伸展树 Treap 替罪羊树 二维RMQ 二维哈希表 二维树状数组 二维线段树 无旋Treap 划分树 归并树 可并堆 莫队...

weixin_30914981的博客 2163

ACM竞赛模版

文章目录常用板子基本模板小数比较快读板子高精度板子(带符号,自适应长度)分数板子组合数板子线筛板子字符串字符串hashKMP O(n)O(n)O(n)Z函数(扩展KMP)后缀数组SA后缀自动机SAMAC自动机数学扩展gcd逆元阶乘逆元 O(n)O(n)O(n)数逆元 O(n)O(n)O(n)矩阵基本模版矩阵快速幂高斯消元矩阵求逆素数判定质因数分解裴蜀定理全排列(prev&next)(prev\&next)(prev&next)错排公式中国剩余定理扩展中国剩余定理Lucas定理欧拉筛快

py_2017的博客 792

不定期更新模板重新整理...

20190815 UPD 删掉了一些自己没有使用过的模板,增加了部分最近整理的模板 ———————————————————————————————————————————————————————— 数论 1.拉格朗日插值模板 2018牛客多校第一场F Sum of Maximum #include<bits/stdc++.h> using namespace std; ...

qq_38515845的博客 517
上一篇: 2021牛客多校第一场 F——Find 3-friendly Integers
下一篇: 2021牛客多校第一场 H——Hash Function
Linda_yezi_coder
博客等级 码龄7年 20粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值