当前位置: 首页 > news >正文

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

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)

相关文章:

  • 大宇无限将全部业务系统都部署在亚马逊云科技上
  • 每日学术速递1.28
  • 数据库面试题总结
  • 基于PIL和Tesseract的数字计算验证码识别处理思路
  • C技能树-判断语句
  • 【JavaGuide面试总结】Java IO篇
  • 网络编程(2)
  • 带你走进Java8新特性Stream流的小世界
  • 07_linux中断控制
  • java多线程的使用
  • [数据库迁移]-ES集群的部署
  • 计算机相关专业混体制的解决方案(事业编之学校与医院)
  • Go语言基础入门第二章
  • 蓝桥杯2021省赛Python
  • 更方便Spring存储和读取对象,五大类注解、@Bean、@Autowired、@Resource
  • 数据挖掘,计算机网络、操作系统刷题笔记36
  • 走进 HTML
  • Kettle(8):删除组件
  • linux基本功系列之-rpm命令实战
  • java基础学习 day37 (集合)
  • https://app.hackthebox.com/machines/Inject
  • Spring —— Spring简单的读取和存储对象 Ⅱ
  • 渗透测试之冰蝎实战
  • Mybatis、TKMybatis对比
  • Microsoft Office 2019(2022年10月批量许可版)图文教程
  • 《谷粒商城基础篇》分布式基础环境搭建
  • 哈希表题目:砖墙
  • Vue 3.0 选项 生命周期钩子
  • 【车载嵌入式开发】AutoSar架构入门介绍篇
  • 【计算机视觉 | 目标检测】DETR风格的目标检测框架解读