博客
关于我
《算法竞赛进阶指南》0x01 T1 a^b
阅读量:268 次
发布时间:2019-03-01

本文共 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
#include
using 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
#include
using 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
#include
using 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<

转载地址:http://lnho.baihongyu.com/

你可能感兴趣的文章
SAR图像超分辨技术
查看>>
fpga工程师笔试题
查看>>
神经网络遗传算法函数极值寻优-非线性函数极值
查看>>
201604-4 游戏 ccf
查看>>
1144. The Missing Number (20)
查看>>
为什么阿里巴巴不建议在for循环中使用”+”进行字符串拼接
查看>>
【Spring Boot 26】分别在SpringBoot和Vue中解决跨域问题
查看>>
Class.forName(),classloader.loadclass用法详解
查看>>
tp5.1 页面错误!请稍后再试~ 安装好后,提示错误
查看>>
阿里云 安全组规则 设置某个IP不能访问服务器(出站)
查看>>
系统打了补丁后,IIS装不了的解决…
查看>>
禁止重复提交(JavaScript控制表单…
查看>>
php js 通过sotitle(id,arr)函数输入ID取得返回值
查看>>
PHP二维数组按键值排序
查看>>
删除外键约束
查看>>
c++ 预处理命令 #error 用法
查看>>
C++树的层次遍历(附完整源码)
查看>>
OpenGL fragmentlist片段列表的实例
查看>>
OpenGL hdrb和loom的实例
查看>>
OpenGL packetbuffer分组缓冲器的实例
查看>>