乘法逆元进阶([模板]乘法逆元 2)

乘法逆元及两道模板题详解 乘法逆元 就是 此时b就是a模p意义下的逆元,即 下面我们用inv[a]表示a模p意义下的逆元。 逆元是好东西啊 有时候我们需要算出 a/b mod p 的值,用朴素的方法,我们只能在 a 上不断加 p ,直到它能被 b 整除为止。 当 a,b,p 都很大的时候,这种方法就只能凉凉了,但如果有了逆元,我们就可以非常方便,快捷地求解。 ... 阅读详情

题目链接

简单说下题意,给你一个长度为 n n n数列 a a a, k k k, p p p,让你求
∑ i = 1 n k i a i m o d   p \sum_{i=1}^n {\frac{k^i}{a_i}} mod \ p i=1∑n​ai​ki​mod p
这道题很明显是一个乘法逆元的题,因为我们要对分母取模

首先我们很容易想到的是给每个 a i a_i ai​都求一下逆元,复杂度是 O ( n l o g p ) O(nlogp) O(nlogp)
但是很明显是过不了的,因为数据范围写着呢
n ≤ 5 × 1 0 6 , p ≤ 1 0 9 n\leq 5\times10^6,p\leq 10^9 n≤5×106,p≤109
很明显是过不去的,所以求 n n n次逆元肯定是不可能的,我们看看能不能让求逆元的次数尽量的少

我们往傻了想

小学几年级忘了,学了个东西叫做通分对不对,我们把上面那个玩意通分一下,变成我们要求这个东西:

∑ i = 1 n k i ⋅ ∏ j = 1 n a j a i ⋅ ∏ j = 1 n a j m o d   p \sum_{i=1}^n {\frac{k^i \cdot \prod_{j=1}^n a_j}{a_i\cdot \prod_{j=1}^n a_j} }mod \ p i=1∑n​ai​⋅∏j=1n​aj​ki⋅∏j=1n​aj​​mod p
还是不好求,继续化简
∑ i = 1 n k i ⋅ ∏ j = 1 i − 1 a j ⋅ ∏ j = i + 1 n a j ∏ j = 1 n a j m o d   p \sum_{i=1}^n{\frac{k^i\cdot \prod_{j=1}^{i-1} a_j\cdot \prod_{j=i+1}^n a_j}{\prod _{j=1}^n a_j}}mod \ p i=1∑n​∏j=1n​aj​ki⋅∏j=1i−1​aj​⋅∏j=i+1n​aj​​mod p
加起来
∑ i = 1 n ( k i ⋅ ∏ j = 1 i − 1 a j ⋅ ∏ j = i + 1 n a j ) ∏ j = 1 n a j m o d   p \frac{\sum_{i=1}^n (k^i\cdot \prod_{j=1}^{i-1} a_j\cdot \prod_{j=i+1}^n a_j)}{\prod _{j=1}^n a_j}mod \ p ∏j=1n​aj​∑i=1n​(ki⋅∏j=1i−1​aj​⋅∏j=i+1n​aj​)​mod p
然后就很明显了,我们可以先求分子,分母只需要最后求一次逆元就可以出来了,不懂的可以去看看我之前的博客广告 广告
这里因为保证 p p p是质数,直接费马小定理就可以(第一个广告)
对于分子怎么做,我们可以预处理前缀积和后缀积 m u l f i mulf_i mulfi​和 m u l b i mulb_i mulbi​
那么答案就是
∑ i = 1 n ( k i ⋅ m u l f i − 1 ⋅ m u l b i + 1 ) × ( ∏ i = 1 n a i ) − 1 m o d   p \sum_{i=1}^n(k^i\cdot mulf_{i-1}\cdot mulb_{i+1})\times (\prod_{i=1}^n a_i)^{-1} mod \ p i=1∑n​(ki⋅mulfi−1​⋅mulbi+1​)×(i=1∏n​ai​)−1mod p

这样就可以 O ( n ) O(n) O(n)求了

这道题很仁慈的地方是不用龟速乘 e m m m emmm emmm

代码:

# include <cstdio>
# include <algorithm>
# include <cstring>
# include <cmath>
# include <climits>
# include <iostream>
# include <string>
# include <queue>
# include <stack>
# include <vector>
# include <set>
# include <map>
# include <cstdlib>
# include <ctime>
using namespace std;

# define Rep(i,a,b) for(int i=a;i<=b;i++)
# define _Rep(i,a,b) for(int i=a;i>=b;i--)
# define RepG(i,u) for(int i=head[u];~i;i=e[i].next)

typedef long long ll;
const int N=5e6+5;
const int inf=0x7fffffff;
const double eps=1e-7;
template <typename T> void read(T &x){
	x=0;int f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar())if(c=='-')f=-1;
	for(;isdigit(c);c=getchar())x=(x<<1)+(x<<3)+c-'0';
	x*=f;
}

# define int long long 

int n,p,k,ans,mult;
int a[N];
int mulf[N],mulb[N];

int Qpow(int base,int ind){
	int res=1;
	while(ind){
		if(ind&1)res=res*base%p;
		base=base*base%p;
		ind>>=1;
	}
	return res;
}

signed main()
{
	read(n),read(p),read(k);
	Rep(i,1,n)read(a[i]);
	mulf[0]=mulb[n+1]=1;
	Rep(i,1,n)mulf[i]=(mulf[i-1]*a[i])%p;
	_Rep(i,n,1)mulb[i]=(mulb[i+1]*a[i])%p;
	mult=1;
	Rep(i,1,n){
		mult=mult*k%p;
		ans=(ans+mult*mulf[i-1]%p*mulb[i+1])%p;
	}
	printf("%lld\n",ans*Qpow(mulf[n],p-2)%p);
	return 0;
}

这道题的一大收获就是巩固了Markdown基础语法…

【模板】乘法逆元 如果 ax≡1(modb)ax≡1(modb)ax \equiv 1 \pmod{b} 且 (a,b)=1(a,b)=1(a, b) = 1 ,则称 xxx 是模 bbb 意义下的 aaa 的逆元,记为 a−1a−1a^{-1}。 逆元可以用来在计算 tamodbtamodb\frac{t}{a} \bmod b 时,转化为 ta−1modbta−1modbta^{-1} \bmod b 。 ... 阅读详情

相关推荐

模意义下的乘法逆元(线性递推(乘法逆元))

这是一道模板题。

Pretty Boy Fox的博客 1155

P5431 【模板】乘法逆元2

题目 题目描述 给定 n 个正整数 aia_iai​,求它们在模 ppp 意义下的乘法逆元。 由于输出太多不好,所以将会给定常数 kkk,你要输出的答案为: ∑i=1nkiai\sum\limits_{i=1}^n\frac{k^i}{a_i}i=1∑n​ai​ki​ 当然要对 p 取模。 输入格式 第一行三个正整数 n,p,k 意义如题目描述。 第二行 n 个正整数 a_i ,是你要求逆元的数。 输出格式 输出一行一个整数,表示答案。 输入输出样例 输入 6 233 42 1 4 2 8 5 7 输出

keyixi的博客 395

c#.net使用正则表达式验证文本中是否包含手机号码或电话号码?

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Collections; namespace RegularPhoneApp { class Program

码农 3584

洛谷 P5431 【模板】模意义下的乘法逆元 2

对于本题建议先观看洛谷 P3811 【模板】模意义下的乘法逆元 、和的讲解。

Jianghappy123456的博客 458

Codex智能体从零搭建:环境配置、代码管理与MCP扩展实战

AI智能体(Agent)作为连接大语言模型与实际应用的关键技术,通过感知、决策与执行框架,将AI能力融入具体工作流。其核心原理在于利用提示工程、上下文管理与工具调用,将自然语言指令转化为可执行操作。在软件开发领域,AI智能体能够显著提升代码生成、项目管理和自动化任务的效率。通过Model Context Protocol(MCP)等标准化协议,智能体可以安全、结构化地集成外部工具与服务,实现能力扩展。本文聚焦于Codex这一AI驱动的代码助手平台,详细解析其环境配置、代码索引、记忆系统等核心模块,并深入探讨

weixin_34220179的博客 589

Win10自动更新怎么永久关闭?有效的Win10强制更新关闭方法

之前小编为大家分享过一些Win10彻底关闭Windows Update自动更新的方法,主要是通过一些如设置流量计费或借助一些专门的小工具来实现,但往往会发现,Win10自动更新就像打不死的小强,不管怎么关闭,之后还是会自动更新,让不少小伙伴颇为不爽。今天小编带来了这篇改进型教程,通过全方位设置,彻底关闭Win10自动更新,感兴趣的小伙伴不妨试试吧。 ...

jianai0602的博客 108万+

P5431 【模板】乘法逆元 2

P5431 【模板】乘法逆元 2

静谧幽蓝の神奇小屋 796

大模型-CLIP 详细介绍

最先进的计算机视觉系统通常被训练来预测一组预定义的对象类别。这种受限的监督形式限制了它们的通用性和可用性,因为要指定任何其他视觉概念,就需要额外的标注数据。比如,它们可以识别“猫”、“狗”、“汽车”等。但是,这种做法有一个明显的局限性:如果你想让系统识别一个新的类别,比如说“独角兽”,你就必须提供大量带有“独角兽”标签的图片来训练系统。这不仅耗时费力,而且限制了系统的灵活性和广泛适用性。直接从原始文本中学习关于图像的信息是一种很有前途的替代方案,因为它利用了更广泛的监督来源。

晓的博客 9706

【模板】模意义下的乘法逆元 2(快读+数学)

给定n个正整数ai​,求它们在模p意义下的乘法逆元。由于输出太多不好,所以将会给定常数ki1∑n​ai​ki​答案对p取模。

m0_60738889的博客 938

观测器选择与工程实践建议

摘要:永磁同步电机(PMSM)无传感器控制中,观测器选型需综合考虑应用场景、性能需求与成本。消费级(家电、工具)推荐滑模观测器(SMO),成本低、鲁棒性强;工业级(伺服、泵阀)适用扩展卡尔曼滤波器(EKF),精度高但计算复杂;车规级(EPS、主驱动)需混合观测器(SMO+EKF),兼顾全速域性能与可靠性。低速时需高频注入法,IPMSM更适用。SMO易实现但存在抖振,EKF调试复杂。未来趋势是混合架构与AI增强,提升适应性与性能。选型需权衡速度范围、电机类型、处理器能力及成本。

汽车软件开发 145

OpenClaw插件开发指南:扩展AI智能体的无限可能

OpenClaw插件开发指南介绍了如何扩展AI智能体的功能。该插件系统支持多种类型(功能、集成、工具、界面、工作流插件),具有模块化、低耦合等优势。开发环境需要安装SDK和工具包,通过plugin.json配置插件信息,主文件实现核心功能。API提供智能体管理、任务执行等接口,示例演示了文本处理插件的创建流程。开发者可基于此框架灵活扩展OpenClaw的能力。

一键难忘的博客 560

P5431 【模板】模意义下的乘法逆元 2 题解

P5431 【模板】模意义下的乘法逆元 2 题解

yaosichengalpha的博客 664

C# WinForms 多语种切换实现:打造国际化应用程序

合理实现多语种切换功能可以显著提升应用程序的国际化水平。模块化设计:将本地化逻辑模块化,便于管理和维护。异常处理:始终捕获和处理可能的异常,确保程序的健壮性。资源管理:合理管理资源文件,避免重复和遗漏。测试:在不同语言环境下进行全面测试,确保所有字符串都能正确显示。文档和注释:为关键代码添加详细的文档和注释,便于后续维护。

墨夶的博客 1690

P3811 【模板】模意义下的乘法逆元

(img-lu6euieF-1733312046476)](img-h3mVdMFh-1733312046476)]输入保证 $ p $ 为质数。

cc_even的博客 1756

Android 13.0仿ios的hotseat效果修改hotseat样式

在13.0系统产品rom定制化开发中,在项目需求的需要,系统原生Launcher的布局样式很一般,所以需要重新设计ui对布局样式做调整,产品在看到 ios的hotseat效果觉得特别美观,所以要仿ios一样不需要横屏铺满的效果 居中显示就行了,所以就要看hotseat的具体布局显示了

安卓兼职framework和app工程师的博客 1144

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

乘法逆元计算模板

乘法逆元,就是有ab ≡  1 mod p,则b就是mod p意义下乘法的逆元,即b=inv(a)。 逆元的意义就是在模意义下,即剩余系中,除法是没有封闭性的,很有可能造成溢出,所以用 乘法逆元代替除法。因为本人是蒟蒻,这里就记一下求逆元的方法和模板了。 1.递推求乘法逆元。 在O(n)时间内可以推出1~n 在模p意义下的逆元。方法如下: 所以线性递推式为 inv[i]=(mod...

Q755100802的博客 3984

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

乘法逆元的模板以及应用

首先我们可以开一个最小堆模拟集合,因为每次取出的数必须是集合里面最小的数,否则就不满足题意,堆中的元素总数为分母,当前队头的最小元素的数量即为分子,该数量可以用map来记录,计算不同分数的积并进行取模,最后将分母进行快速幂的逆元,然后乘上分子在取模一次即可。求最后取出来的数组满足递增(小于等于后一项)的概率,然后对这个概率进行取模处理。所以我们可以用快速幂来算出x的值,这个数就是 a 的逆元了。非-1:将这个数存入集合里面。-1:从集合里面取出一个数。

wh233z的博客 1082

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

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

乘法逆元3种方法总结[最全]

若ax≡1 mod f, 则称a关于1模f的乘法逆元为x。也可表示为ax≡1(mod f)。 当a与f互素时,a关于模f的乘法逆元有解。如果不互素,则无解,但是有其他方法实现相同功能。如果f为素数,则从1到f-1的任意数都与f互素,即在1到f-1之间都恰好有一个关于模f的乘法逆元 本文讲详细解释:什么是逆元,为什么要求逆元?扩展欧几里得算法讲解;求逆元的三种方法;了解基本知识后,我们来求逆元: 求逆元分为两类:==**2.a p 互质时:**= ==1.a p 不互质时逆元无解== 可用此公式实现相同功能:

卖炫迈的小男孩的博客 8527

【算法模板】数论:乘法逆元求法二则

费马小定理:时间复杂度为 O(logp),其中 ppp 是质数模数。扩展欧几里得算法:时间复杂度为 O(logm),其中 m 是模数。在实际应用中,如果模数 p 是质数且已知,费马小定理通常会更高效,因为只需要进行一次快速幂运算。而扩展欧几里得算法在模数不为质数的情况下仍然适用,且其处理范围更广。

2303_80346267的博客 872

【数论】乘法逆元(求逆元的三种方式)

乘法逆元的概念,求解逆元的三种方式

2401_87820834的博客 1475

浅谈乘法逆元

乘法逆元

lkasnive的博客 1651

P3811 【模板】乘法逆元

P3811 【模板】乘法逆元

静谧幽蓝の神奇小屋 943

洛谷 P3811 [模板] 模意义下的乘法逆元

乘法逆元 线性递推 洛谷题解 C++代码 附注释

一只摸鱼的bbc 988

P3811 【模板】模意义下的乘法逆元 题解

P3811 【模板】模意义下的乘法逆元 题解

yaosichengalpha的博客 833

洛谷 P3811 【模板】 乘法逆元

乘法逆元模板题题目背景描述输入格式输出格式提示样例输入样例输出样例总结AC代码 题目 背景 求逆元线性算法模板题 原题链接 描述 给定 n,pn,p 求 1\sim n1∼n 中所有整数在模 pp 意义下的乘法逆元 输入格式 一行两个正整数 n,p 输出格式 输出 n 行,第 i 行表示 i 在模 p 下的乘法逆元。 提示 1 ≤ n ≤ 3 × 10^6, n < p < 20000528 样例 输入样例 10 13 输出样例 1 7 9 10 8 11 2 5 3 4 总结 这道题就

weixin_48842132的博客 468
上一篇: kmp字符串匹配
下一篇: [国家集训队] 小Z的袜子
NephrenRuqInsania
博客等级 码龄8年 20粉丝 115原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值