
《算法竞赛进阶指南》0x01 T1 a^b
发布日期:2021-05-04 20:14:44
浏览次数:11
分类:技术文章
本文共 1783 字,大约阅读时间需要 5 分钟。
题目描述
求 a b a^b ab m o d mod mod p p p 的值。
输入格式
三个整数 a a a , b b b , p p p ,在同一行用空格隔开。
输出格式
输出一个整数,表示 a b a^b ab m o d mod mod p p p 的值。
数据范围
0 0 0 ≤ \leq ≤ a a a , b b b ≤ \leq ≤ 1 0 9 10^9 109
1 1 1 ≤ \leq ≤ p p p ≤ \leq ≤ 1 0 9 10^9 109输入样例
3 2 7
输出样例
2
题解
算法1:直接计算 O ( b ) O(b) O(b)
直接使用C++中的 p o w ( a , b ) pow(a,b) pow(a,b) 函数计算 a a a的 b b b次方(当然也可以通过for循环实现此函数),再将最后的结果 m o d mod mod p p p
考虑到本题的数据范围过大,取模前的结果可能非常的大,因此选择使用 u n s i g n e d unsigned unsigned l o n g long long l o n g long long 存储该结果code
#includeusing namespace std;long long a,b,p;//unsigned long long power(long long a,long long b) //手写pow函数 //{ // long long result=1;// for(int i=1;i<=b;i++)// result=result*a;// return result;//}int main(){ cin>>a>>b>>p; unsigned long long x; x=pow(a,b);// x=power(a,b); cout<
算法2:取模运算优化 O ( b ) O(b) O(b)
在算法1的基础上进行优化
依据取模运算中的 ( a (a (a × \times × b ) b) b) m o d mod mod p p p = = = ( a (a (a m o d mod mod p p p × \times × b b b m o d mod mod p ) p) p) m o d mod mod p p p (取模运算具体内容可参考 ) 可以解决空间上的问题,即在每次进行乘法的过程中取模,防止最后的结果过大code
#includeusing namespace std;long long a,b,p;long long power(long long a,long long b){ long long result=1; for(int i=1;i<=b;i++) { result=result*a; result%=p; } return result%p;}int main(){ cin>>a>>b>>p; cout<
算法3:快速幂(正解) O(logb)
通过取模运算解决上了空间的问题,能够计算出正确的结果
但由于b的值过大,循环次数非常多,出现了时间问题 通过快速幂来解决时间问题(快速幂具体内容可参考 ) 为了进一步加快时间,可以使用位运算来进行操作code
#includeusing namespace std;long long a,b,p;long long power(long long a,long long b) { long long result=1; while(b>0) { if(b&1) result=result*a%p; //b&1等价于b%2==1 b>>=1; //power>>=1等价于power=power/2 a=(a*a)%p; } return result%p;}int main(){ cin>>a>>b>>p; cout<
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2025年03月10日 06时24分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Bat:一种具有语法高亮和 Git 集成的 Cat 类命令 | Linux 中国
2019-03-03
在 Linux 上操作目录 | Linux 中国
2019-03-03
如何禁用 Ubuntu 服务器中终端欢迎消息中的广告 | Linux 中国
2019-03-03
【每日安全资讯】一个让你用微信支付的勒索病毒 一场黑吃黑的表演
2019-03-03
极客漫画:TCP 兄弟 | Linux 中国
2019-03-03
认识存储:块、文件和对象 | Linux 中国
2019-03-03
用于游戏开发的图形和音乐工具 | Linux 中国
2019-03-03
极客漫画:你准备好微服务了吗? | Linux 中国
2019-03-03
Linux 上最好的五款音乐播放器 | Linux 中国
2019-03-03
如何用 Linux 命令行发电子邮件 | Linux 中国
2019-03-03
研究发现微软 OneDrive 上存储的恶意软件突然大幅增加
2019-03-03
网易云首倡中台方法论,发布全链路中台技术方案
2019-03-03
传输层协议
2019-03-03
DHCP和DHCP中继
2019-03-03
记录一次空指针异常(NullPointerException)的断点调试
2019-03-03
黄毅然的JAVA学习(七)
2019-03-03
数字营销专业术语介绍
2019-03-03