快速幂取模

原创 2015年07月09日 15:20:02



用二分,使复杂度由 O(n) 变为 O(logn)



#include<iostream>
#include<cstdio>
using namespace std;
/// (b^n)mod m;  (a*b mod m) = (a mod m)*(b mod m)mod m       O(log n)
/// (b^n)mod m;  (a - b ) mod m =( (a mod m)-(b mod m) + n ) mod m  )      O(log n)
/// (b^n)mod m;  (a + b ) mod m =( (a mod m)+(b mod m) mod m  )       O(log n)
int mod(int b,int n,int m) // 位运算
{
    int ans=1;
    while(n){
        if(n&1)
            ans=(ans*b)%m;
        b=(b*b)%m;
        n=n>>1;
    }
    return ans;
}

int mod_1(int b,int n,int m) //  O(log n) 递归
{
    if(n==0) return 1;
    int x=mod_1(b,n/2,m);
    long long ans=(long long)x*x%m;
    if(n%2) ans=ans*b%m;   /// n&1
    return (int)ans;
}

int main()
{
    int b,n,m;
    while(scanf("%d%d%d",&b,&n,&m))
    {
        printf("%d  ",mod(b,n,m));
        printf("%d\n",mod_1(b,n,m));
    }
    return 0;
}
/**

12996 227 37909  == 7775


*/


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

暑期9_15队内练习赛 B题 大数取模+矩阵快速幂

题目大意:求sin(n!*ln(n)*f[n]%2012)的结果,n 思路:哎~~菜菜菜啊~~却不是我的菜~~n!至少到2012都不用求后面的啦~~因为取余都为0了~~我还在傻乎乎的用矩阵求快速幂·...

HDU 1575 Tr A【矩阵快速幂取模+求迹】

求一个矩阵的n次方的迹。 矩阵快速幂取模。模板题。

快速幂取模(转载)

快速幂取模算法 在网站上一直没有找到有关于快速幂算法的一个详细的描述和解释,这里,我给出快速幂算法的完整解释,用的是C语言,不同语言的读者只好换个位啦,毕竟读C的人较多~ 所谓的快速幂,...

C语言快速幂取模算法小结

本文实例汇总了C语言实现的快速幂取模算法,是比较常见的算法。分享给大家供大家参考之用。具体如下: 首先,所谓的快速幂,实际上是快速幂取模的缩写,简单的说,就是快速的求一个幂式的模(余)。在程序设计过程...

快速幂,积取模总结

在Miller Rabbin测试素数,就用到了快速幂取模的思想。这里总结下。 求a^b%c(这就是著名的RSA公钥的加密方法) 当a,b很大时,直接求解这个问题不太可能  算...

poj 1845 Sumdiv(数论:欧拉函数+二分求等比数列前n项和+快速幂取模)

很凶残的一道题啊... 给定一个n先用欧拉函数求出

HihoCoder 1151 矩阵快速幂 + 取模

传送门:HihoCoder 1151题解 题意 + 递推 同HDU 1143 传送门: HDU 1143解题报告坑点 因为这题n值比较大, 所以和HDU 1143不同, 必须用快速幂取模, ...
  • ADjky
  • ADjky
  • 2016-10-12 13:02
  • 309

hdu 3524 Perfect Squares(找规律,循环节,快速幂取模)

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

ACdream 1007【快速幂+乘法取模】

D - a + b Time Limit:1000MS     Memory Limit:64000KB     64bit IO Format:%lld & %llu Submit...

快速幂取模

问题定义:数论中经常出现的一个问题是对一个数的幂取模,也称为模取幂,即求a^b mod n。如果计算量较小,可以直接计算出a^b的值,再作模n运算。但是如果a和b的值都非常大,a^b的值用计算机难以表...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)