洛谷 P1226:【模板】快速幂

news2024/11/24 1:20:29

【题目来源】
https://www.luogu.com.cn/problem/P1226

【题目描述】
给你三个整数 a,b,p,求 a^b mod p。

【输入格式】
输入只有一行三个整数,分别代表 a,b,p。

【输出格式】
输出一行一个字符串 a^b mod p=s,其中 a,b,p 分别为题目给定的值,s 为运算结果。

【输入样例】
2 10 9

【输出样例】
2^10 mod 9=7

【说明/提示】
样例解释:2^10 =1024,1024 mod 9=7。
数据规模与约定:对于 100% 的数据,保证 0≤a,b<2^31,a+b>0,2≤p<2^31。

【算法分析】
● 快速幂,又称二进制取幂,是一个以 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


● 快速幂经典代码

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

typedef long long LL;

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

int main() {
    int a,n;
    cin>>a>>n;
    cout<<fastPow(a,n)<<endl;
}

/*
in:6 8
out:1679616
*/

● 带取模的快速幂代码
计算过程中,为了
防止溢出,需要进行“取模”运算,其运算规则如下:
(a+b)%p=(a%p+b%p)%p
(a-b)%p=(a%p-b%p)%p
(a*b)%p=(a%p*b%p)%p


【算法代码】

#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;
        b>>=1;
        a=a*a%p;
    }
    return ans%p;
}

int main() {
    int a,b,p;
    cin>>a>>b>>p;
    cout<<a<<"^"<<b<<" mod "<<p<<"="<<fastPow(a,b,p)%p;
}

/*
in:2 10 9
out:2^10 mod 9=7
*/






【参考文献】
https://www.cnblogs.com/littlehb/p/15588930.html
https://oi-wiki.org/math/binary-exponentiation/


 

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

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

相关文章

多线程——线程池

目录 前言 一、什么是线程池 1.引入线程池的原因 2.线程池的介绍 二、标准库中的线程池 1.构造方法 2.方法参数 &#xff08;1&#xff09;corePoolSize 与 maximumPoolSize &#xff08;2&#xff09;keepAliveTime 与 unit &#xff08;3&#xff09;workQueue&am…

GPT-4o 和 GPT-4 Turbo 模型之间的对比

GPT-4o 和 GPT-4 Turbo 之间的对比 备注 要弄 AI &#xff0c;不同模型之间的对比就比较重要。 GPT-4o 是 GPT-4 Turbo 的升级版本&#xff0c;能够提供比 GPT-4 Turbo 更多的内容和信息&#xff0c;但成功相对来说更高一些。 第三方引用 在 2024 年 5 月 13 日&#xff0…

HTB:Blocky[WriteUP]

目录 连接至HTB服务器并启动靶机 使用nmap对靶机进行端口扫描 再次使用nmap对靶机开放端口进行脚本、服务信息扫描 对FTP服务版本&#xff1a;ProFTPD_1.3.5进行漏洞扫描 对SSH服务版本&#xff1a;OpenSSH 7.2p2进行漏洞扫描 使用浏览器访问靶机80端口 使用浏览器访问U…

信息搜集-域名信息收集

1.1 域名信息收集 WHOIS查询&#xff1a; 通过WHOIS查询可以快速得到域名的IP段、DNS解析、注册时间、地址等信息&#xff0c;或许运用合理可以巧妙的绕过CDN。备案信息收集&#xff1a; 网站备案信息收集更加方便定位资产到具体的企业名称、ICP备案号、备案人名称、公司、所处…

图片写入GPS经纬高信息

近期项目中需要往java平台传输图片&#xff0c;直接使用QNetworkAccessManager和QHttpMultipart类即可&#xff0c;其他博文中有分享。 主要是平台接口对所传输图片有要求&#xff1a;需要包含GPS信息&#xff08;经度、纬度、高度&#xff09;。 Qt无法直接实现&#xff0c;…

2003年秋季我给哈工大数学研究生写的讲义

我写的没出版讲义共有278页&#xff0c;书末参考文献 我写的讲义书末索引&#xff0c;冯克勤的书《代数数论》书末没有索引&#xff0c;陆洪文、李云峰的书《模形式讲义》书末也有索引 我写的讲义自制的封面 &#xff08;对数学的研究我的经验是&#xff0c;跟其他科学类似&am…

「Qt Widget中文示例指南」如何实现半透明背景?

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 本文将为大家展示如…

Java应用程序的服务器有哪些

1.Tomcat、Jetty 和 JBoss 区别&#xff1f; Apache Tomcat、Jetty 和 JBoss都是用于部署Java应用程序的服务器&#xff0c;它们都支持Servlet、JSP和其他Java EE&#xff08;现在称为Jakarta EE&#xff09;技术。尽管它们有一些相似的功能&#xff0c;但它们之间还是存在一些…

Mysql在线修改表结构工具gh-ost使用说明及实践

本文内容较多&#xff0c;篇幅较长&#xff0c;若不想了解ghost原理&#xff0c;几种模式的介绍以及具体的验证过程&#xff0c;可直接跳到‘四 gh-ost使用总结’查看简洁版使用说明。 一 gh-ost使用场景 生产环境当有关于一个大表的大操作时(比如select count一个大表)&…

沈阳乐晟睿浩科技有限公司抖音小店领域的强者

在当今数字化浪潮的推动下&#xff0c;电子商务以其便捷性、高效性和广泛的覆盖面&#xff0c;成为了推动经济发展的新引擎。而抖音小店&#xff0c;作为短视频平台上的新兴电商形态&#xff0c;更是凭借其庞大的用户基础、精准的内容推送机制以及独特的购物体验&#xff0c;迅…

qt QNetworkProxy详解

一、概述 QNetworkProxy通过设置代理类型、主机、端口和认证信息&#xff0c;可以使应用程序的所有网络请求通过代理服务器进行。它支持为Qt网络类&#xff08;如QAbstractSocket、QTcpSocket、QUdpSocket、QTcpServer、QNetworkAccessManager等&#xff09;配置网络层代理支持…

Spring Boot框架下的厨艺社交网络构建

1 绪论 1.1 研究背景 现在大家正处于互联网加的时代&#xff0c;这个时代它就是一个信息内容无比丰富&#xff0c;信息处理与管理变得越加高效的网络化的时代&#xff0c;这个时代让大家的生活不仅变得更加地便利化&#xff0c;也让时间变得更加地宝贵化&#xff0c;因为每天的…

iOS 本地存储地址(位置)

前言: UserDefaults 存在沙盒的 Library --> Preferences--> .plist文件 CoreData 存在沙盒的 Library --> Application Support--> xx.sqlite 一个小型数据库里 (注:Application Support 这个文件夹已开始是没有的,只有当你写了存储代码,运行之后,目录里才会出…

IDEA开发工具使用技巧积累

一、IDEA 工具设置默认使用maven的settings.xml文件 第一步&#xff1a;打开idea工具&#xff0c;选中 File ——> New Projects Setup ——> Settings for New Projects 第二步&#xff1a;先设置下自动构建项目这个选项 第三步&#xff1a;选中 Build Tools ——>…

深度学习-循环神经网络-LSTM对序列数据进行预测

项目简介: 使用LSTM模型, 对文本数据进行预测, 每次截取字符20, 对第二十一个字符进行预测, LSTM层: units100, activationrelu Dense层: units输入的文本中的字符种类, 比如我使用的文本有644个不同的字符, 那么units64 激活函数: 因为是多分类, 使用softmax 因为这是最…

树莓派5使用pytorch训练模型(CPU)

Pytorch 对于树莓派提供了较好的支持&#xff0c;可以利用 Pytorch 在树莓派上进行试试推理&#xff0c;当然也可以使用树莓派进行模型训练了&#xff0c;这里尝试使用树莓派CPU对模型进行训练。 0 环境配置 必要的环境安装&#xff0c;这个步骤没有什么值得说的&#xff0c;…

c++(树)

定义 2-3 树中的每一个节点都有两个孩子&#xff08;称为 2 节点&#xff0c;2-node&#xff09;或三个孩子&#xff08;称为 3 节点&#xff0c;3-node)。 2 节点&#xff0c;有一个数据元素和两个孩子。只能有两个孩子或没有孩子&#xff0c;不能出现只有一个孩子的情况。如果…

JVM学习总结:字节码篇

本文是学习尚硅谷宋红康老师主讲的 尚硅谷JVM精讲与GC调优教程 的总结 &#xff0c;部分内容也参考了 JavaGuide 网站&#xff08;文末有链接&#xff09; JVM 概述 Oracle JDK 与 OpenJDK 是什么关系&#xff1f; 2006 年 SUN 公司将 Java 开源&#xff0c;也就有了 OpenJDK。…

【verilog】四位全加器

文章目录 前言一、实验原理二、实验过程三、实验结果参考文献 前言 进行 FPGA 全加器 实验 一、实验原理 module adder(ain,bin,cin,cout,s); input ain,bin,cin; output cout,s; assign coutain&bin | ain&cin | bin&cin; assign sain^bin^cin; endmoduletimesc…

复杂类型map与struct

1.map:Key-Value 型数据格式 建表: create table myhive.test_map( id int, name string, members map<string,string>, age int) row format delimited fields terminated by , COLLECTION ITEMS TERMINATED BY # MAP KEYS TERMINATED BY :; 数据导入:load data local …