luogu1226 取余运算||快速幂
2024-10-01 06:28:09
题目大意:快速求$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;
}
最新文章
- Unity 序列化 总结
- 搭建selenium grid简单配置
- JavascriptExecutor
- laravel administrator 一款通用的后台插件(PHP框架扩展)
- vim 基础命令
- flush vs ob_flush
- 使用PowerQuery操作OData数据
- ajax 传参 乱码问题
- Jordan Lecture Note-3: 梯度投影法
- 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
- (转载)Eclipse下配置Github环境 .
- PropertyGrid—为复杂属性提供下拉式编辑框和弹出式编辑框
- 原创SQlServer数据库生成简单的说明文档小工具(附源码)
- 探讨SQL Server并发处理存在就更新七种解决方案
- 深浅copy
- 团队第九次 # scrum meeting
- python之xml 文件的读取方法
- Hystrix 学习使用
- 未能正确加载“EditorPackage”包(转)
- webpack的css处理
热门文章
- wps 2016 个人版 重新开始编号
- 树莓派-基于raspistill实现定时拍照
- jQueryAjax模拟按键消抖(可设置抖动延迟时间)
- 【技术累积】【点】【java】【18】URLEncode
- 【sqli-labs】 less25a GET- Blind based -All you OR&;AND belong to us -Intiger based(GET型基于盲注的去除了or和and的整型注入)
- CallableStatement的用法
- java环境搭建心得
- Linux基础:uniq命令总结
- [置顶]
 Every Programmer Should Know These Latency Numbers
- 获取url