快速幂求逆元与逆元

news2024/11/15 8:13:08

我上一篇博客链接写的是多个数求乘法逆元而快速幂求逆元用于单个数求乘法逆元

逆元是对分数取模用的

	对于除法取模不成立,即(a/b)%p≠(a%p/b%p)%p。
	求逆元的思路:(一般ACM的题目都是对1e9+7这种素数取模,所以gcd(a,p)==1)
	a*b=1(mod p) => b=1/a(mod p)。
	根据费马小定理:b^(p-1)=1(mod p) => b^(p-2)=1/b(mod p)
	可以看出来逆元1/b (mod p)=b^(p-2)
	可以得出a/b对质数p取模就是 a*b^(p-2) mod p 。

2024CCPC郑州邀请赛-Problem H. 随机栈用到了逆元但当时没有想到没有写出来

代码如下

#include<iostream>
#include<queue>
#include<algorithm>
#include<map>
# define int long long
using namespace std;
int mod = 998244353;
map<int, int> m;
int asd(int a, int b) 
{
	int sum = 1;
	while(b)
	{
		if(b%2==0)
		{
			a=a*a%mod;
			b=b/2;
		}
		else
		{
			b=b-1;
			sum=sum*a%mod;
			b=b/2;
			a=a*a%mod;
		}
	}
	return sum%mod;
}
signed  main() {
	priority_queue<int, vector<int>, greater<int> > p;
	int n, num, l = -1, t = 0, s = 1, x = 1;
 
	cin >> n;
	for (int i = 0; i < 2 * n; i++) 
	{
		cin >> num;

		if (t != 1)
		 {
			if (num == -1) 
			{
				s = s * m[p.top()] % mod;
				x = x * p.size() % mod;
				if (p.top() >= l) 
				{
					l = p.top();
					m[p.top()]--;
					p.pop();
				}
				else
					t = 1;
			} 
			else 
			{
				p.push(num);
				m[num]++;
			}
		}
	}
	if (t == 1)
		cout << "0" << endl;
	else 
	{
		int ans = s * asd(x, mod - 2) % mod;
		cout << ans << endl;
	}

}

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

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

相关文章

毕设 大数据校园卡数据分析

文章目录 0 前言1 课题介绍2 数据预处理2.1 数据清洗2.2 数据规约 3 模型建立和分析3.1 不同专业、性别的学生与消费能力的关系3.2 消费时间的特征分析 4 Web系统效果展示5 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设…

STM32F1之OV7725摄像头·像素数据输出时序、FIFO 读写时序以及摄像头的驱动原理详解

STM32F1之OV7725摄像头-CSDN博客 STM32F1之I2C通信-CSDN博客 目录 1. 像素数据输出时序 2. FIFO 读写时序 2.1 写时序 2.2 读时序 3. 摄像头的驱动原理 1. 像素数据输出时序 主控器控制 OV7725 时采用 SCCB 协议读写其寄存器&#xff0c;而它输出图像时则使用 VGA 或…

【Linux signal】

Linux signal 一、信号分类二、什么是信号集&#xff1f;三、信号的3个处理过程3.1 发送信号3.1.1 向自身发送信号(raise)3.1.2 向别的进程发送信号(kill)3.1.3 发送闹钟信号(alarm) 3.2 接收(注册)信号3.3 处理信号 在Linux操作系统中&#xff0c;SIGUSR1和SIGUSR2是用户定义的…

仅需一块 4GB 的 GPU ,就能运行开源大语言模型:Llama3 70B

最强的开源大语言模型 Llama3 已经发布一段时间了&#xff0c;一些盆友资源有限&#xff0c;私信询问是否可以使用 4GB 的 VRAM 在本地运行 Llama3 70B。 与 GPT-4 相比&#xff0c;Llama3 的性能如何&#xff1f;Llama3 使用了哪些关键的前沿技术使其变得如此强大&#xff1f…

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…

【C++题解】1699 - 输出是2的倍数,但非3的倍数的数

问题&#xff1a;1699 - 输出是2的倍数&#xff0c;但非3的倍数的数 类型&#xff1a;循环 题目描述&#xff1a; 请从键盘读入一个整数 n&#xff0c;输出 1∼n 中所有是 2 的倍数&#xff0c;但非 3 的倍数的数&#xff0c;每行 1个。 比如&#xff0c;读入一个整数10 &…

六招搞定,SPA单页面加载速度慢的问题。

众所周知&#xff0c;SPA页面有很多优点&#xff0c;但是首屏加载慢的问题一直被诟病&#xff0c;本文介绍几种解决策略&#xff0c;希望对老铁们有所帮助。 一、SPA页面的独有优势 1. 更快的用户体验&#xff1a; SPA在加载初始页面后&#xff0c;可以在用户与应用程序交互…

k8s dashboard安装

本案例&#xff0c;k8s版本为v1.22.17&#xff0c;所以安装v2.7.0版本的dashboard 1、下载dashboard的yaml文件 curl -O https://raw.githubusercontent.com/kubernetes/dashboard/v2.7.0/aio/deploy/recommended.yaml 2、修改recommended.yaml文件 修改定义的Service&…

HDFS 组织架构

优质博文&#xff1a;IT-BLOG-CN 一、HDFS 概述 HDFS 产生背景&#xff1a; 随着数据量越来越多&#xff0c;一个系统存储不下所有的数据&#xff0c;那么就需要分配到多个操作系统的磁盘中进行存储&#xff0c;但是不方便管理和维护&#xff0c;迫切需要一种系统来管理多台机…

蜜罐技术是一种什么防御技术?实现原理是什么?

前言&#xff1a;蜜罐技术的出现改变了这种被动态势&#xff0c;它通过吸引、诱骗攻击者&#xff0c;研究学习攻击者的攻击目的和攻击手段&#xff0c;从而延缓乃至阻止攻击破坏行为的发生&#xff0c;有效保护真实服务资源。 自网络诞生以来&#xff0c;攻击威胁事件层出不穷…

设置虚拟机为静态IP

为什么需要设置静态IP&#xff1a;有时候我们在练习项目的时候&#xff0c;明明已经连接好了虚拟机的ip&#xff0c;某一天突然连接不上了&#xff0c;通过ifconfig命令查看发现虚拟机的ip发生了变化&#xff0c;导致之前做的内容都需要重新布置&#xff0c; 一、设置静态IP …

AI办公自动化:用kimi将子文件夹里面的文件批量重命名

工作任务和目标&#xff1a;一个文件夹下有多个子文件夹 子文件夹中有多个srt文件&#xff0c;需要删除文件名中的english和空格 第一步&#xff0c;在kimi中输入如下提示词&#xff1a; 你是一个Python编程高手&#xff0c;一步步的思考&#xff0c;来编写下面任务的Python脚…

如何使用pycrypt加密工具测试反病毒产品的检测性能

关于pycrypt pycrypt是一款基于Python 3语言开发的加密工具&#xff0c;广大研究人员可以使用该工具来尝试绕过任意类型的反病毒产品&#xff0c;以检测目标反病毒产品的安全性能。 功能介绍 1、目前已知反病毒产品检测率为0/40&#xff1b; 2、支持绕过任意EDR解决方案&#…

【C++】类与对象——继承详解

目录 一、继承的概念 二、继承关系和访问限定符 三、基类和派生类对象赋值转换 四、继承中的作用域 五、派生类的默认成员函数 六、复杂的菱形继承及菱形虚拟继承 一、继承的概念 继承是面向对象程序设计中很重要的一个概念。继承允许我们依据另一个类来定义一个类&#…

python01

一、Python介绍 Python是一个计算编程语言&#xff0c;可以实现计算程序开发&#xff0c;也可以用于数据处理。SQL语言只能用于结构化数据的处理。Python的比SQL应用更广泛。 1990年推广Python&#xff0c;最初是应用于运维开发&#xff0c;随着不断更新迭代Python的功能更加丰…

AWS Elastic Beanstalk 监控可观测最佳实践

一、概述 Amazon Web Services (AWS) 包含一百多种服务&#xff0c;每项服务都针对一个功能领域。服务的多样性可让您灵活地管理 AWS 基础设施&#xff0c;然而&#xff0c;判断应使用哪些服务以及如何进行预配置可能会非常困难。借助 Elastic Beanstalk&#xff0c;可以在 AW…

仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码

码名称&#xff1a;仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码 开发环境&#xff1a;帝国cms7.5 空间支持&#xff1a;phpmysql 仿《Q极速体育》NBACBA体育直播吧足球直播综合体育直播源码自动采集 - 我爱模板网源码名称&#xff1a;仿《Q极速体育》NBACBA体育直…

【机器学习与大模型】驱动下的应用图像识别与处理

摘要&#xff1a; 本文深入探讨了机器学习在图像识别与处理领域的应用&#xff0c;特别是在大模型的推动下所取得的巨大进展。详细阐述了图像识别与处理的基本原理、关键技术&#xff0c;以及机器学习算法和大模型如何提升其性能和准确性。通过实际案例分析了其在多个领域的广泛…

大模型分布式训练并行技术分享

目前业内解决大模型问题&#xff0c;基本以多节点、分布式方案为主。分布式方案具体的实施时&#xff0c;又分为数据并行、参数并行、流水线并行等&#xff0c;针对具体的业务场景采取合适的并行方案方可带来更高的效率。 后续结合业内主流的分布式框架&#xff0c;具体介绍各种…

网络编程的基础知识(适合新手)

网络编程 在Java中&#xff0c;网络编程是指使用Java语言进行网络通信的编程技术。这种技术使得位于不同地理位置的计算机能够通过网络进行通信&#xff0c;实现资源共享和信息传递。 一、定义 Java网络编程是Java语言在网络通信方面的应用&#xff0c;它利用Java提供的网络…