【快速幂】876. 快速幂求逆元

news2024/9/21 16:49:26

876. 快速幂求逆元

文章目录

  • 题目描述
    • 输入格式:
    • 输出格式:
    • 数据范围
    • 输入样例
    • 输出样例
  • 方法:快速幂
    • 解题思路
    • 代码
    • 复杂度分析:

题目描述

给定 n 组 a i , p i a_i,p_i ai,pi,其中 p i p_i pi 是质数,求 a i a_i ai p i p_i pi 的乘法逆元,若逆元不存在则输出 impossible。
注意:请返回在 0∼p−1 之间的逆元。
乘法逆元的定义

若整数 b,m 互质,并且对于任意的整数 a,如果满足 b|a,则存在一个整数 x,使得 a / b ≡ a × x ( m o d   m ) a/b≡a×x(mod\ m) a/ba×x(mod m),则称 x 为 b 的模 m 乘法逆元,记为 b − 1 ( m o d   m ) b^{−1}(mod\ m) b1(mod m)。b 存在乘法逆元的充要条件是 b 与模数 m 互质。当模数 m 为质数时, b m − 2 b^{m−2} bm2 即为 b 的乘法逆元。

输入格式:

第一行包含整数 n。
接下来 n 行,每行包含一个数组 a i , p i a_i,p_i ai,pi,数据保证 p i p_i pi 是质数。

输出格式:

输出共 n n n 行,每组数据输出一个结果,每个结果占一行。
a i a_i ai p i p_i pi 的乘法逆元存在,则输出一个整数,表示逆元,否则输出 impossible。

数据范围

  • 1 ≤ n ≤ 1 0 5 1≤n≤10^5 1n105
  • 1 ≤ a i , p i ≤ 2 × 1 0 9 1≤a_i,p_i≤2\times10^9 1ai,pi2×109

输入样例

3
4 3
8 5
6 3

输出样例

1
2
impossible

方法:快速幂

解题思路

在这里插入图片描述

代码

#include <iostream>

using namespace std;

typedef long long LL;

int n;

LL qmi(int a, int k, int p) {
    LL res = 1;
    while(k) {
        if(k & 1)   res = (LL)res * a % p;
        k >>= 1;
        a = (LL)a * a % p; 
    }
    return res;
}

int main() {
    cin >> n;
    while(n--) {
        int a, p;
        cin >> a >> p;
        if(a % p == 0)  puts("impossible");
        else    cout << qmi(a, p - 2, p) << endl;
    }
    return 0;
}

复杂度分析:

  • 时间复杂度: O ( n × l o g ( p − 2 ) ) O(n\times log(p-2)) O(n×log(p2))
  • 空间复杂度: O ( 1 ) O(1) O(1)

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

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

相关文章

MySQL 8.0.31中使用MySQL Workbench提示配置文件错误信息

MySQL 8.0.31中使用MySQL Workbench提示配置文件错误信息 Error opening configuration file UnicodeDecodeError:‘gbk’ coded can’t decode byte 0x92 in position 5004: illegal multibyte sequence 配置文件之前安装MySQL Server的时候编码格式好像改了, 才使的MySQL W…

高级通讯录(C语言)

目录 前言 为何要实现高级通讯录 高级通讯录实现&#xff1a; 创建通讯录 打印菜单 初始化通讯录 实现加载功能 实现添加功能 实现增容功能 实现删除功能 实现查询功能 实现修改功能 实现查询所有联系人功能 实现排序功能 实现清空功能 实现保存功能 实现退出功能 通讯录总代码…

基于stm32G431RBT6蓝桥杯嵌入式—新建工程和点灯

目录 cube新建工程 GPIO输出与LED模块 推挽输出模式push-pull 开漏输出模式open-drain LED原理 程序 cube新建工程 时钟树配置&#xff1a;一般使用内部时钟。 GPIO输出与LED模块 输入0&#xff0c;输出GND&#xff1b;输入1&#xff0c;输出3.3V。 P-MOS管高电平导通&a…

2023年新手卖家怎么做好跨境电商?

随着互联网时代的高速发展&#xff0c;跨境电商成为我国经济发展中不可忽视的重要力量&#xff0c;在国内优惠政策大力扶持以及线上消费习惯的加持下&#xff0c;跨境电商行业迎来了发展的黄金机遇期。但是随之而来的是各大资本的涌入&#xff0c;跨境电商中小卖家们也面对越发…

第五章 程序控制结构

一、程序流程控制介绍 在程序中&#xff0c;程序运行的流程控制决定程序是如何执行的&#xff0c;是我们必须掌握的&#xff0c;主要有三大流程控制语句。 &#xff08;1&#xff09;顺序控制 &#xff08;2&#xff09;分支控制 &#xff08;3&#xff09;循环控制顺序控制&am…

c++11 标准模板(STL)(std::forward_list)(十二)

定义于头文件 <forward_list> template< class T, class Allocator std::allocator<T> > class forward_list;(1)(C11 起)namespace pmr { template <class T> using forward_list std::forward_list<T, std::pmr::polymorphic_…

数据库管理-第五十四期 春节俩故障(20230128)

数据库管理 2023-01-28第五十四期 春节俩故障1 19.13 bug 320763052 19.15 CSS总结第五十四期 春节俩故障 虽然春节期间除了年三十的现场值班和远程值班&#xff0c;没啥事的&#xff0c;结果还是处理了俩故障&#xff0c;今天上工&#xff0c;分析一下。 1 19.13 bug 320763…

了解3dmax面片建模方式

首先在模式里面选中面片栅格&#xff0c;Patch Grids&#xff1b; 选择四边形面片&#xff1b; 在顶视图中画一个面片&#xff0c;之后如下&#xff1b;面片从前和左看到的是一条线&#xff1b; 调整面片参数&#xff0c;长度分段和宽度分段分别为2和3&#xff1b; 工具栏选中修…

信息论复习—线性分组码的基本性质

目录 线性分组码&#xff1a; 非线性码示例&#xff1a; 线性码示例: 许用码字间的距离&#xff0d;&#xff0d;码距&#xff1a; 码距与码的检错纠错能力之间的关系&#xff1a; 线性分组码的基本性质&#xff1a; 线性分组码的最小码距与最小码重的关系&#xff1a; …

最详细的华为VRP操作指南

第二章&#xff1a;华为VRP系统 通用路由平台VRP&#xff08;Versatile Routing Platform&#xff09;是华为公司数据通信产品的通用操作系统平台。它以IP业务为核心&#xff0c;采用组件化的体系结构&#xff0c;在实现丰富功能特性的同时&#xff0c;还提供了基于应用的可裁…

Android深入系统完全讲解(43)

为什么要编码&#xff1f;这里主要是因为信息有甬余需要压缩&#xff0c;所以会出现各类算法。如果存储原始 数据&#xff0c;那就很大。 举例来说&#xff0c;BMP&#xff0c;压缩算法有 jpg&#xff0c;png 等等。 比如 PCM&#xff0c;压缩的 mp3 H.264 相关 这里我们看一下…

剑指 Offer 09. 用两个栈实现队列(力扣)

一&#xff1a;题目用两个栈实现一个队列。队列的声明如下&#xff0c;请实现它的两个函数 appendTail 和 deleteHead &#xff0c;分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素&#xff0c;deleteHead 操作返回 -1 )示例 1&#xff1a;输入&…

小米万兆路由器里的Docker安装Alist

小米2022年12月份发布了万兆路由器&#xff0c;里面可以使用Docker。 今天尝试在小米的万兆路由器里安装Alist v3.9.2。 准备工作 请参考https://engchina.blog.csdn.net/article/details/128515422的准备工作。 创建存储 在第三方管理(SimpleDocker)&#xff0c;单击"…

Scala-变量和数据类型

注释在Scala中注释和Java基本一样单行注释&#xff1a;// 多行注释&#xff1a;/* */ 文档注释&#xff1a;/****/变量和常量基本语法声明变量&#xff1a;var 变量名 [:变量类型] 初始值 如&#xff1a;var a:Int 10 声明常量&#xff1a;val 变量名 [:常量类型] 初始值 如…

深度卷积神经网络、池化层

目录1.深度卷积神经网络(a deep convolutional neural network)输入图像的维度是&#xff0c;如果&#xff0c;计算输出图像维度公式&#xff1a;。s表示步幅&#xff0c;p表示填充的层数。filters的通道数是和输入图像的通道数保持一致的。分析上图案例&#xff1a;第一层卷积…

《深入浅出计算机组成原理》学习笔记 Day13

数据通路&#xff08;中&#xff09;1. 时钟信号的硬件实现2. 通过 D 触发器实现存储功能参考1. 时钟信号的硬件实现 有些电路只要需要给定输入&#xff0c;就能得到固定的输出&#xff0c;这样的电路称为组合逻辑电路&#xff08;Combination Logic Circuit&#xff09;。 时…

如何使用自己的虚拟机(linux)做个RAID玩?

在虚拟机原有基础上添加两块磁盘&#xff08;均20G&#xff09;&#xff0c;步骤如下&#xff1a;使用命令“lsblk”检查添加是否生效&#xff1b;使用命令“mdadm”进行linux的raid管理&#xff08;先安装mdadm工具&#xff09;创建RAID1,名字为md1&#xff0c;即使用mdadm命令…

虚拟机字节码执行引擎

------摘自周志明 《深入理解Java虚拟机》运行时栈帧结构Java虚拟机以方法作为最基本的执行单元&#xff0c;“栈帧”&#xff08;Stack Frame&#xff09;则是用于支持虚拟机进行方法调用和方法执行背后的数据结构&#xff0c;它也是虚拟机运行时数据区中的虚拟机栈&#xff…

C语言及算法设计课程实验三:最简单的C程序设计——顺序程序设计((一、二、三、四)的综合文章)

C语言及算法设计课程实验三&#xff1a;最简单的C程序设计——顺序程序设计&#xff08;&#xff08;一、二、三、四&#xff09;的综合文章&#xff09;一、实验目的二、 实验内容2.1、实验内容1&#xff1a;通过下面的程序掌握各种格式转换符的正确使用方法2.2、实验内容2&am…

十年聚焦,巨杉数据库再获毕马威2022领先金融科技50企业殊荣

巨杉数据库凭借在金融科技与分布式数据库领域出色的市场表现与过硬的技术实力&#xff0c;成功入选“2022中国领先金融科技50企业”&#xff0c;成为本次榜单唯一入选的分布式数据库厂商。 1月16日&#xff0c;「2022毕马威中国金融科技企业双50榜单」&#xff08;下简称榜单&a…