博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj1995-快速幂取模
阅读量:5009 次
发布时间:2019-06-12

本文共 741 字,大约阅读时间需要 2 分钟。

#include
#define LL long longusing namespace std;//快速幂算法LL pow(LL a,LL b,int m){ LL r=1,base=a; while(b!=0){ if(b&1) r=r*base%m;//同余模公式 base=base*base%m;//同余模公式 b>>=1; } return r;}int main(){ int n,r,m; cin>>n; while(n--){ cin>>r>>m; LL x,y,sum=0; for(int i=0;i
>x>>y; sum+=pow(x,y,r); } cout<
<

快速幂顾名思义,就是快速算某个数的多少次幂。其时间复杂度为O(log2N),与朴素的O(N)相比效率有了极大的提高。

以下以求a的b次方来介绍
[1]  
把b转换成 。
该二进制数第i位的权为
例如
11的二进制是1011
11 = 2³×1 + 2²×0 + 2¹×1 + 2º×1
因此,我们将a¹¹转化为算
 
了解到了这个便有了思路,
在计算幂的过程中,为了保证不溢出,使用同余模公式:
(a+b)%m=(a%m+b%m)%m;
(axb)%m=(a%mxb%m)%m;

转载于:https://www.cnblogs.com/tz346125264/p/4864799.html

你可能感兴趣的文章
ios app 真机crash报告分析
查看>>
CRC标准以及简记式
查看>>
SEO搜索引擎
查看>>
关于本地使用tomcat部署web应用,浏览器自动跳转为https的问题
查看>>
一、Text To Speech
查看>>
Java读取并下载网络文件
查看>>
github上构建自己的个人网站
查看>>
在word中粘贴的图片为什么显示不完整
查看>>
SQL Server 数据库的鼠标操作
查看>>
net软件工程师求职简历
查看>>
总线置顶[置顶] Linux bus总线
查看>>
nullnullHandling the Results 处理结果
查看>>
SQL SERVER BOOK
查看>>
JS基础回顾,小练习(判断数组,以及函数)
查看>>
多任务——进程
查看>>
WCF:如何将net.tcp协议寄宿到IIS
查看>>
WebAPI HelpPage支持area
查看>>
Path元素
查看>>
php_soap扩展应用
查看>>
第二百三十一节,Bootstrap 介绍
查看>>