首页 > 其他分享 >快速幂结合取模运算

快速幂结合取模运算

时间:2023-04-18 23:44:39浏览次数:41  
标签:取模 运算 power int long base result 快速

先贴一个快速幂模板

long long int quik_power(int base, int power)
{
    long long int result = 1;
    while (power > 0)           //指数大于0进行指数折半,底数变其平方的操作
    {
        if (power & 1)            //指数为奇数,power & 1这相当于power % 2 == 1
            result *= base;     //分离出当前项并累乘后保存
        power >>= 1;            //指数折半,power >>= 1这相当于power /= 2;
        base *= base;           //底数变其平方
    }
    return result;              //返回最终结果
}

转载至(24条消息) 快速幂算法 超详细教程_qascetic的博客-CSDN博客

相信你对这个模板已经很熟了,那么我们来使用快速幂加上取模运算来求一些比较大的幂mod一个数的问题

 可以看到a,b,p都是比较大的,为了防止爆int,我们要在快速幂的同时进行取模运算,即每次快速幂都进行取模,防止超出int范围

下面给出几个取模运算的公式

  1. (a+b)%p=(a%p+b%p)%p
  2. (a-b)%p=(a%p-b%p)%p
  3. (a*b)%p=(a%p * b%p)%p

由此,对于每次快速幂都是一个乘法,因此可以借用第三条公式加入我们的快速幂模板中变为如下

int P;
cin>>P;
long long int quik_power(int base, int power) { long long int result = 1; while (power > 0) { if (power & 1) result =result*base%p; power >>= 1; base =base*base%P; } return result%P; }

 对于快速幂,借用二进制,可以看为  N^1 * N^2 * N^4 * N^8 * N^16 * ....* N^2*n-1,

在进行取模,采用二分的思想,可以知道总结果就是每个步骤加上最后的返回步骤都要取模

标签:取模,运算,power,int,long,base,result,快速
From: https://www.cnblogs.com/WKWKSL/p/17331709.html

相关文章

  • 结对编程——随机生成四则运算程序
    在本次结对编程中,我和2152634王锴中同学一同进行参与了随机生成四则运算题目程序的编写,本次编写环境在clion上,使用c++风格的代码完成编写。在编写的过程中,我们一同探讨了用哪种语言进行编译,最终选定c++,原因在于对c++的掌握程度更深。在一起完成此项目的同时,我们收获了很多,尤其对方......
  • Docker快速入门 三(dockerfile常用命令,dockerfile构建django项目,docker私有仓库,docker-
    目录Docker一、Dcokerfile常用命令二、Dockerfile构建Django项目三、Docker私有仓库1、简介2、镜像传到官方仓库3、镜像分层4、搭建私有仓库四、Docker-conpose1、Docker-conpose部署项目1、新建flask项目2、编写dockerfile3、编写docker-conpose的yml文件4、启动docker-compoes2......
  • obd demo快速部署单副本oceanbase(在线)
    资源要求:可用内存不少于8G安装目录空间不少于50G(默认安装在当前安装用户的家目录下) 1.什么是obd?odb是oceanbase社区版部署工具oceanbasedeployer的简称,通过obd可以快速完成oceanbaseclusterr的部署。不传入配置文件的情况下,在单机通过执行obddemo可以快速部署oceanba......
  • 利用开源快速开发框架,让办公自动化更顺畅!
    在办公自动化发展的时期,引进先进的系统软件可以帮助企业实现提质增效,让办公更高效、更便捷、更灵活、数据管理更顺畅。其中,开源快速开发框架就是其中一种工具,其便利、灵活、易操作等特性在广大用户当中深受喜爱,是办公自动化“快速奔跑”起来的得力助手。一、有实力的服务商,保障更......
  • 通过docker快速部署oceanbase单机库
    docker方式部署oceanbase单库提示:  系统可用内存不能低于6G。  根目录(/)剩余磁盘空间不能小于30G。 1.搜索oceanbase的镜像[root]#dockersearchoceanbaseINDEXNAMEDESCRIPTION......
  • Java运算符——(带符号右移)>>、(无符号右移)>>>、与(&)
    >>表示带符号右移,如:inti=15;i>>2的结果是3,移出的部分将被抛弃。转为二进制的形式可能更好理解,00001111(15)右移2位的结果是00000011(3),00011010(18)右移3位的结果是00000011(3)。>>>无符号右移:按二进制形式把所有的数字向右移动对应巍峨位数,低位移出(舍弃),高位的空位补零。对于......
  • 大数据的快速崛起,离不开数据、区块链和算法的支持
    事实上,自2001年来,大数据已然呈现出爆炸式增长。经过多年发展,大数据的应用已经帮助我们开发了更多、更高端的技术在我们的工作、生活中。与此同时,大数据也衍生出了其他技术,比如人工智能、机器学习等。那么,放眼未来,大数据又将如何开启新征程?1.通过数据,更好赋权这个意思就是我们应该给......
  • win系统快速搭建日志查看系统Log Parser Studio
    使用LogParserStudio 一共两步一、软件下载地址:LogParser2.2 Download:https://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=24659 LogParserStudiodownload: https://gallery.technet.microsoft.com/Log-Parser-Studio-cd458765 二......
  • performance_schema 笔记(一)—— 简介与快速入门
    系列文章参考自《MySQL性能优化金字塔法则》,删除了书里重复说明和过于复杂的一些解释,完整版请参考原书。第一篇将简单介绍performance_schema是什么、有什么用、用法快速入门,它由哪些表组成以及这些表的用途。 一、performance_schema简介performanceschema是运行在较低级别的......
  • C++重载的奥义之运算符重载
    0、引言        重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。        正如在之前的文章《重载的奥义之函数重载》中介绍的类似,函数的重载是指利......