题目大意:快速求$a^b\mod p$的值。

根据二进制,令$b=\sum t_k\cdot 2^k, t\in \{0,1\}$,那么$$a^b=a^{\sum t_k\cdot 2^k}\mod p=\prod a^{t_k \cdot 2^k}\mod p$$。$k$表示当前处理的$b$的二进制数的位数,$t_k$的取值取决于当前$b$的二进制位$k$上的值是$0$还是$1$。

同理,为了防止乘法越界,还要进行快速乘法。$$ab\mod p=\sum t_k\cdot a\cdot 2^k\mod p$$,各项解释与上相同。

#include <cstdio>
using namespace std; #define LL long long LL mul(LL a, LL b, LL p)
{
LL ans = 0;
while (b)
{
if (b & 1)
ans = (ans + a) % p;
a = (a + a) % p;
b >>= 1;
}
return ans;
} LL power(LL a, LL b, LL p)
{
LL ans = 1;
while (b)
{
if (b & 1)
ans = mul(ans, a, p);//更新
a = mul(a, a, p);//(a^2^k)^2=a^(2*2^k)=a^2^(k+1)
b >>= 1;//b的二进制下一位
}
return ans;
} int main()
{
LL a, b, p;
scanf("%lld%lld%lld", &a, &b, &p);
printf("%lld^%lld mod %lld=%lld\n", a, b, p, power(a, b, p));
return 0;
}

  

最新文章

  1. Unity 序列化 总结
  2. 搭建selenium grid简单配置
  3. JavascriptExecutor
  4. laravel administrator 一款通用的后台插件(PHP框架扩展)
  5. vim 基础命令
  6. flush vs ob_flush
  7. 使用PowerQuery操作OData数据
  8. ajax 传参 乱码问题
  9. Jordan Lecture Note-3: 梯度投影法
  10. 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
  11. (转载)Eclipse下配置Github环境 .
  12. PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框
  13. 原创SQlServer数据库生成简单的说明文档小工具(附源码)
  14. 探讨SQL Server并发处理存在就更新七种解决方案
  15. 深浅copy
  16. 团队第九次 # scrum meeting
  17. python之xml 文件的读取方法
  18. Hystrix 学习使用
  19. 未能正确加载“EditorPackage”包(转)
  20. webpack的css处理

热门文章

  1. wps 2016 个人版 重新开始编号
  2. 树莓派-基于raspistill实现定时拍照
  3. jQueryAjax模拟按键消抖(可设置抖动延迟时间)
  4. 【技术累积】【点】【java】【18】URLEncode
  5. 【sqli-labs】 less25a GET- Blind based -All you OR&amp;AND belong to us -Intiger based(GET型基于盲注的去除了or和and的整型注入)
  6. CallableStatement的用法
  7. java环境搭建心得
  8. Linux基础:uniq命令总结
  9. [置顶] Every Programmer Should Know These Latency Numbers
  10. 获取url