`
kmplayer
  • 浏览: 497737 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

快速模取幂算法

阅读更多
1,乘法模运算规则:
(a * b) % n = (a % n * b % n) % n  
2,模取幂运算a^b mod c:
b如果比较大,可以利用所谓的二分法,b=b0+b1*2^1+b2*2^2+...+bn*2^n从最低位b0开始,由右至左逐位扫描.
3,实例代码:
#include <iostream>
using namespace std;

//计算a^bmodn
int modexp(int a,int b,int n)
{
    int ret=1;
    int tmp=a;
    while(b)
    {
       //基数存在
       if(b&0x1) ret=ret*tmp%n;
       tmp=tmp*tmp%n;
       b>>=1;
    }
    return ret;
}

int main()
{
    cout<<modexp(2,10,3)<<endl;
    return 0;
}
分享到:
评论

相关推荐

    C++快速幂与大数取模算法示例

    一、快速幂 其实就是求(a^b)% p ,(其中a,b,p都比较大在int范围内)这类问题。 首先要知道取余的公式: (a*b)%p=(a%p*b%p)%p 。 那么幂不就是乘机的累积吗,由此给出代码: int fast(int a,int b,int p) { ...

    acm常用代码及算法

    模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 图论: 1.Prim算法求最小生成树 2.Dijkstra算法求单源最短路径 3.Bellman-...

    算法导论(part2)

    4.4.1 取正合幂时的证明 4.4.2 上取整函数和下取整函数 第5章 概率分析和随机算法 5.1 雇用问题 5.2 指示器随机变量 5.3 随机算法 *5.4 概率分析和指示器随机变量的进一步使用 5.4.1 生日悖论 ...

    算法导论(part1)

    4.4.1 取正合幂时的证明 4.4.2 上取整函数和下取整函数 第5章 概率分析和随机算法 5.1 雇用问题 5.2 指示器随机变量 5.3 随机算法 *5.4 概率分析和指示器随机变量的进一步使用 5.4.1 生日悖论 ...

    ACM 算法经典代码 数据结构经典代码

    3.模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 图论: 1.Prim算法求最小生成树 2.Dijkstra算法求单源最短路径 3.Bellman-ford算法求单源最短...

    ACM常用代码

    模取幂运算 4.求解模线性方程 5.求解模线性方程组(中 国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 图论: 1.Prim 算法求最小生成 树 2.Dijkstra 算法求单源 最短路径 3.Bellman-ford 算法求 单源最短路径 4....

    ACM巨全模板 .pdf

    12.十进制矩阵快速幂(n很大很大的时候) 13.欧拉函数 14.费马小定理 15.二阶常系数递推关系求解方法 (a_n=p*a_{n-1}+q*a_{n-2}) 16.高斯消元 17.矩阵快速幂 18.分解质因数 19.线性递推式BM(杜教) 20.线性一次方程组解...

    ACM 内部预定函数

    3.模取幂运算 4.求解模线性方程 5.求解模线性方程组(中国余数定理) 6.筛法素数产生器 7.判断一个数是否素数 8.求子距阵最大和 9.求一个数每一位之和 10.质因数分解 11.高斯消元法解线性方程组 图论: ...

    C语言程序设计:基于Qt实现的叫号系统,模拟银行、医院的取号叫号系统.zip

    还有3.3节提到的,在用私有密钥进行幂模运算时使用中国余数定理等。 ④ 对C++核心类库进行重点优化,使其运算效率尽可能提高。其中包括对各类之间的组织细节、各程序模块的具体编写等,进行全面细致的检查和修改,...

    IOI国家集训队论文集1999-2019

    骆 骥 -《浅析解 "对策问题" 的两种思路——从《取石子》问题谈起》 孙方成 -《偶图的算法及应用》 孙林春 -《让我们做得更好——从《Parity》的解法谈程序的优化》 王知昆 -《搜索顺序的选择》 许智磊 -《二分...

    国家集训队2019论文集.zip

    我们只需要类似快速幂地倍增k,每次把多项式对S(x)取模。 x' mod s(x) 的次数不超过m-2,我们再由定义带入a的前m-1项求出G即可。 求两个次数O(m)的多项式取模结果在模域下可以做到O(mlog(m))-时间复东度(可 以参见...

    挑战程序设计竞赛(第2版)

    2.6.4 快速幂运算 2.7 一起来挑战GCJ的题目(1) 2.7.1 Minimum Scalar Product 2.7.2 Crazy Rows 2.7.3 Bribe the Prisoners 2.7.4 Millionaire 阅读 第3章 出类拔萃——中级篇 3.1 不光是查找值!“二分搜索” ...

    数据结构(C++)有关练习题

    6、 用C++编写求多项式的和与积的算法,要求如下: a. 要求从键盘分别输入2个多项式的系数以及最高次幂; b. 通过重载操作符+和*,完成多项式的和与积的计算; c. 输出运算结果; 7、 编写一个程序...

    内存管理内存管理内存管理

    只是简单地将这个位置向前或者向后移动,就可以向进程添加内存或者从进程取走内存。 mmap:mmap(),或者说是“内存映像”,类似于 brk(),但是更为灵活。首先,它可以映射任何位置的内存,而不单单只局限于进程...

    操作系统(内存管理)

    以下是该算法的略述: 清单 5. 主分配程序的伪代码 1. If our allocator has not been initialized, initialize it. 2. Add sizeof(struct mem_control_block) to the size requested. 3. start at managed_...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 第一章 Oracle入门 一、 数据库概述 数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今五十年前。...

Global site tag (gtag.js) - Google Analytics