做TopCoder SRM 576 D2 L3 题目时,程序有个地方需要对一个数大量求幂并取余,导致程序运行时间很长,看了Editoral之后,发现一个超级高效的求幂并取余的算法,之前做System test时,程序运行时间(最慢的测试用例)为500ms左右,使用此方法之后,运行时间直接减为20ms,快了20多倍,所以将此方法记录下来。

算法时间复杂度为 log(n)。

这个算法其实就是  数据结构与算法分析 (Weiss 著) 一书中开头的那个递归求幂算法的非递归版,简洁明了。

代码如下:

	// Finds x raised to the y-th exponent modulo MOD (即求 x^y % MOD)
const int MOD = 1e9 + 9;
int modPow(int x, int y)
{
long long res = 1, a = x;
while (y > 0) {
if (y & 1) {
res = (res * a) % MOD;
}
a = (a * a) % MOD;
y >>= 1;
}
return static_cast<int> (res);
}

高效求幂取余 算法,复杂度 log(n)的更多相关文章

  1. 洛谷 P1226 【模板】快速幂||取余运算

    题目链接 https://www.luogu.org/problemnew/show/P1226 题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 ...

  2. 【转】C语言快速幂取模算法小结

    (转自:http://www.jb51.net/article/54947.htm) 本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法.分享给大家供大家参考之用.具体如下: 首先,所谓的快速 ...

  3. NYOJ--102--次方求模(快速求幂取模)

    次方求模 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 求a的b次方对c取余的值   输入 第一行输入一个整数n表示测试数据的组数(n<100)每组测试只有一 ...

  4. hdu1061Rightmost Digit(快速幂取余)

    Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. HDU1061_Rightmost Digit【高速幂取余】

    Rightmost Digit Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  6. LightOJ - 1282 - Leading and Trailing(数学技巧,快速幂取余)

    链接: https://vjudge.net/problem/LightOJ-1282 题意: You are given two integers: n and k, your task is to ...

  7. [每日一题2020.06.15]P1226 【模板】快速幂取余运算

    我是题目 快速幂就是快速求 \(a^b\)的一种算法 快速幂 思想 : 比如我要求 \(6^9\) 首先将幂转化为二进制形式 : \[6^9 = 6^{1001} \tag{1} \] 可以得到 : ...

  8. Raising Modulo Numbers_快速幂取模算法

    Description People are different. Some secretly read magazines full of interesting girls' pictures, ...

  9. 洛谷P1226 【模板】快速幂||取余运算

    题目描述 输入b,p,k的值,求b^p mod k的值.其中b,p,k*k为长整型数. 输入输出格式 输入格式: 三个整数b,p,k. 输出格式: 输出“b^p mod k=s” s为运算结果 S1: ...

随机推荐

  1. 常用语言api语法Cheat Sheet

    http://overapi.com/jquery/ OverAPI.com Python jQuery NodeJS PHP Java Ruby Javascript ActionScript CS ...

  2. php实现文件夹下的文件读取功能

    <?php //这里实现 某个文件下的全部图片,并列出来! header("Content-type:text/html;charset=utf8");   $handle= ...

  3. Android:Service的非绑定式的创建和生命周期

    Android的Service若使用非绑定式的创建,则创建后将无法再与它取得联系.即无法传递消息參数等: 所以假设希望创建后仍然与其存在联系,那么能够參考我的前几篇博客<Android:Serv ...

  4. php 多维数组如何用foreach遍历修改其中的一个值

    数组: array(6) { [0]=> array(11) { ["id"]=> string(2) "76" ["topic_id&q ...

  5. 用IO流发送Http请求

    package com.j1.mai.action; import java.io.BufferedReader; import java.io.DataOutputStream; import ja ...

  6. mybati之入门demo

    //书写我的第一个mybaits程序,主要讲的是mybatis-config.xml的文件 需求:根据用户名查询用户信息: 1.  通过session调用selectOnt(statme," ...

  7. Oracle数据库中的blob类型解析

    Oracle的Blob字段比较特殊,他比long字段的性能要好很多,可以用来保存例如图片之类的二进制数据. 写入Blob字段和写入其它类型字段的方式非常不同,因为Blob自身有一个cursor,你必须 ...

  8. java 后台线层也叫守护线层

    import java.util.concurrent.locks.*; class Do9 { public static void main(String[] args) { Ds d=new D ...

  9. Xml读取异常--Invalid byte 1 of 1-byte UTF-8 sequence

    xml读取异常Invalid byte 1 of 1-byte UTF-8 sequence org.dom4j.DocumentException: Invalid byte 1 of 1-byte ...

  10. 利用css进行网页布局

    网页布局: 又称版式布局,是网页UI设计师将有限的视觉元素进行有机的排列组合,将理性的思维个性的化的表现出来,是一种具有个人艺术特色的视觉传达方式.传达信息的同时有美感.网页设计特点(相对纸媒来说). ...