AcWing 875:快速幂

news2024/10/23 4:42:29

【题目来源】
https://www.acwing.com/problem/content/877/

【题目描述】
给定 n 组 a_i,b_i,p_i,对于每组数据,求出 a_i^{b^i} mod \,p_i 的值。

【输入格式】
第一行包含整数 n
接下来 n 行,每行包含三个整数 a_i,b_i,p_i

【输出格式】
对于每组数据,输出一个结果,表示 a_i^{b^i} mod \,p_i 的值。
每个结果占一行。


【数据范围】
1\leq n\leq 100000 \\ 1\leq a_i,b_i,p_i\leq 2\times 10^9

【输入样例】
2
3 2 5
4 3 9

【输出样例】
4
1

【算法分析】
● 快速幂,又称二进制取幂,是一个以 O(logn) 的时间复杂度计算 a^{n} 的小技巧,而暴力的计算需要 O(n) 的时间复杂度。

● 快速幂的原理?
答:快速幂的原理为“将求幂的任务按照指数 n 的二进制表示分割成更小的任务”。例如:
3^{7}=3^{111_{(2)}}=3^{2^2} \times 3^{2^1} \times 3^{2^0}=3^4 \times 3^2\times 3^1
3^{11}=3^{1011_{(2)}}=3^{2^3} \times 3^{2^1} \times 3^{2^0}=3^8 \times 3^2\times 3^1
因为 n\left \lfloor log_2n \right \rfloor+1 个二进制位,因此当知道了 a^1, a^2, a^4, a^8, \dots, a^{2^{\lfloor \log_2 n \rfloor}} 后,我们只需计算 O(log n) 次乘法就可以计算出 a^n

● 本例输入 Markdown 公式时,“
\\”表示换行,“\,”表示空格

【算法代码】

#include <bits/stdc++.h>
using namespace std;

typedef long long LL;

int fastPow(LL a,LL b,LL p) {
    LL ans=1;
    while(b) {
        if(b & 1) ans=ans*a%p;
        a=a*a%p;
        b>>=1;
    }
    return ans;
}

int main() {
    int a,b,p;
    int T;
    cin>>T;
    while(T--) {
        cin>>a>>b>>p;
        cout<<fastPow(a,b,p)<<endl;
    }

    return 0;
}

/*
in:
2
3 2 5
4 3 9

out:
4
1
*/




【参考文献】
https://blog.csdn.net/hnjzsyjyj/article/details/143135845
https://www.acwing.com/problem/content/solution/877/1/








 

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

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

相关文章

初阶数据结构【3】--单链表(比顺序表还好的一种数据结构!!!)

本章概述 前情回顾单链表实现单链表彩蛋时刻&#xff01;&#xff01;&#xff01; 前情回顾 咱们在上一章博客点击&#xff1a;《顺序表》的末尾&#xff0c;提出了一个问题&#xff0c;讲出了顺序表的缺点——有点浪费空间。所以&#xff0c;为了解决这个问题&#xff0c;我…

计算机网络-RSTP快速生成树基础概念

一、STP概念复习 在之前的学习中我们已经学习了STP的概念与作用。参考文章&#xff1a;计算机网络-生成树基础 STP&#xff08;Spanning Tree Protocol&#xff0c;生成树协议&#xff09; 是一种用于在局域网中消除数据链路层物理环路的协议。主要作用是防止交换机冗余链路产生…

app端文章列表查询-详细教程(上)

app端文章列表查询 一、数据库方面 有关文章的表垂直拆分成了三张表&#xff1a;文章基本信息表&#xff08;字段有文章id、文章作者、文章标题、发布时间等&#xff09;、文章配置表&#xff08;字段有文章id、文章是否可评论、文章可转发、是否已下架、是否已删除等&#x…

MySQL 基础查询

1、DISTINCT select DISTINCT EMPLOYEE_ID ,FIRST_NAME from employees 按照ID去重&#xff0c;DISTINCT的字段要放在前面&#xff0c;不会再继续在FIRST_NAME上去重判断&#xff1b; 如果需要多字段去重&#xff0c;需要用到group by&#xff0c;这个后面讲&#xff1b; …

【Fargo】11: pacing 参数不生效:同步调整采集码率

发送侧参数改变 接收测没感觉到 还是2秒收到60个不变: 果然,发送侧的参数设置没生效 发送的码率终于正确了

【C++、数据结构】二叉排序树(二叉查找树、二叉搜索树)(图解+完整代码)

目录 [⚽1.什么是二叉排序树] [&#x1f3d0;2.构建二叉排序树] [&#x1f3c0;3.二叉排序树的查找操作] [&#x1f94e;4.二叉排序树的删除] [&#x1f3b1;5.完整代码] ⚽1.什么是二叉排序树 二叉搜索树又称二叉排序树&#xff0c;它或者是一棵空树&#xff0c;或者是…

【慕伏白教程】将 Windows11 装进口袋 -- 便携式 Windows 11 制作教程

目录 下载 Windows 11 镜像下载 Rufus开始安装 Windows 11 下载 Windows 11 镜像 打开微软 Windows 11 官方下载网站&#xff0c;找到 下载适用于 x64 设备的 Windows 11 磁盘映像 (ISO) 根据个人情况选择要下载的磁盘镜像&#xff0c;选择多版本 ISO 的话可在安装系统开始时进…

多IP连接

一.关闭防火墙 systemctl stop firewalld setenforce 0 二.挂在mnt mount /dev/sr0 /mnt 三.下载nginx dnf install nginx -y 四.启动nginx协议 systemctl start nginx 五.修改协议 vim /etc/nginx/nginx.conf 在root前加#并且下一行添加 root /www:&#xff08;浏…

基于图像拼接开题报告

选题的背景与意义 在日常生活中&#xff0c;使用普通相机获取宽视野的场景图像时&#xff0c;必须通过调节相机的焦距才可以提取完整的场景。由于相机的分辨率有限&#xff0c;拍摄场景越大&#xff0c;得到的图像分辨率就越低&#xff0c;因此只能通过缩放相机镜头减小拍摄的…

应对 .DevicData-X-XXXXXXXX 勒索病毒:防御与恢复策略

引言 随着信息技术的快速发展&#xff0c;网络安全问题愈发严峻。勒索病毒作为一种恶性网络攻击手段&#xff0c;已成为企业和个人面临的重大威胁之一。尤其是 .DevicData-X-XXXXXXXX 勒索病毒&#xff0c;其通过加密用户数据并勒索赎金&#xff0c;给受害者带来了巨大的经济损…

dolphinscheduler创建工作流及工作流中DataX的使用(简单操作)

一、在项目管理中创建项目&#xff1a;点击创建项目 用哪个用户登录的&#xff0c;所属用户就是哪个&#xff0c;直接输入项目名即可 二、点击项目&#xff0c;在项目中创建工作流&#xff0c;用DataX同步数据 按照图片的步骤依次填写完成&#xff0c;注意 图片中的第九步是写…

个税自然人扣缴客户端数据的备份与恢复(在那个文件夹)

一&#xff0c;软件能够正常打开&#xff0c;软件中的备份与恢复功能 1&#xff0c;备份 您按照下面的方法备份一下哦~ 进入要备份的自然人软件&#xff0c;点击左侧系统设置→→系统管理→→备份恢复&#xff1b; 在备份设置里&#xff0c;点击“备份到选择路径”&#xff0c;…

小白向的源码开发详解:直播带货系统与电商平台搭建指南

本篇文章&#xff0c;笔者将为小白们提供一份详细的源码开发指南&#xff0c;帮助你轻松搭建自己的直播带货系统和电商平台。 一、了解直播带货系统的基本构成 直播带货系统主要由以下几个部分组成&#xff1a; 1.前端界面 2.后端服务器 3.数据库 4.直播平台 二、技术选型…

【C++】— 一篇文章让你认识STL

文章目录 &#x1f335;1.什么是STL&#xff1f;&#x1f335;2.STL的版本&#x1f335;3.STL的六大组件&#x1f335;4.STL的重要性&#x1f335;5. 如何学习STL&#x1f335;6. 学习STL的三种境界 &#x1f335;1.什么是STL&#xff1f; STL是Standard Template Library的简称…

深入理解Redis锁与Backoff重试机制在Go中的实现

文章目录 流程图Redis锁的深入实现Backoff重试策略的深入探讨结合Redis锁与Backoff策略的高级应用具体实现结论 在构建分布式系统时&#xff0c;确保数据的一致性和操作的原子性是至关重要的。Redis锁作为一种高效且广泛使用的分布式锁机制&#xff0c;能够帮助我们在多进程或分…

Vue+ECharts+iView实现大数据可视化大屏模板

Vue数据可视化 三个大屏模板 样式还是比较全的 包括世界地图、中国地图、canvas转盘等 项目演示&#xff1a; 视频&#xff1a; vue大数据可视化大屏模板

神经网络模型内部

给大家展示一个三层4*24*24*2神经网络文件的内部&#xff1a; 大小5.06KB 想知道这个模型是怎么训练生成的看我的上一篇文章 用神经网络自动玩游戏

Centos7安装ZLMediaKit

https://github.com/ZLMediaKit/ZLMediaKit 一 获取代码 git clone https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init git submodule update --init 命令用于初始化和更新 Git 仓库中的子模块&#xff08;submodules&#xff09;。这个命令…

vue3 + ts + element-plus 二次封装 el-dialog

实现效果&#xff1a; 组件代码&#xff1a;注意 style 不能为 scoped <template><el-dialog class"my-dialog" v-model"isVisible" :show-close"false" :close-on-click-modal"false" :modal"false"modal-class&…

web网页QQ登录

代码&#xff1a; <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>QQ登录ent</title> </head> <style>ul > li{list-style: none; } a …