博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
快速乘 防爆乘 快速幂
阅读量:5095 次
发布时间:2019-06-13

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

快速幂模板:

typedef long long LL;LL fast_pow(LL a, LL n, LL mod)//快速幂 {    LL ans = 1;    while (n)    {        if (n & 1)            ans = ans*a%mod;        a = a*a%mod;        n >>= 1;    }    return ans;}

如果你是按照二进制来理解快速幂的 那么快速乘也一定很好理解

模板如下:

LL fast_multi(LL m, LL n, LL mod)//快速乘法 {    LL ans = 0;//注意初始化是0,不是1     while (n)    {        if (n & 1)           {             ans += m;             ans %= mod;           }        m = (m + m) % mod;//和快速幂一样,只不过这里是加         n >>= 1;    }    return ans;}

有了快速乘 那么就可以得到改进后的快速幂 可以防爆

LL fast_pow(LL a, LL n, LL mod)//快速幂 {    LL ans = 1;    while (n)    {        if (n & 1)            ans = fast_multi(ans, a, mod);//不能直接乘         a = fast_multi(a, a, mod);        ans %= mod;        a %= mod;        n >>= 1;    }    return ans;}

防爆乘一并放出:

LL mult_mod(LL a, LL b, LL m){    ll c = a*b-(ll)((long double)a*b/m+0.5)*m;    return c<0 ? c+m : c;  //就是算的a*b%m;}

 

转载于:https://www.cnblogs.com/dyhaohaoxuexi/p/10977130.html

你可能感兴趣的文章
[Data Structure & Algorithm] 有向无环图的拓扑排序及关键路径
查看>>
git 常用命令
查看>>
cassandra vs mongo (1)存储引擎
查看>>
Visual Studio基于CMake配置opencv1.0.0、opencv2.2
查看>>
Vue音乐项目笔记(三)
查看>>
遍历Map对象
查看>>
计算剪贴板里仿制的代码行数
查看>>
MySQL索引背后的数据结构及算法原理
查看>>
#Leetcode# 209. Minimum Size Subarray Sum
查看>>
C#语言-04.OOP基础
查看>>
1)session总结
查看>>
PHP深浅拷贝
查看>>
SDN第四次作业
查看>>
ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
查看>>
DM8168 DVRRDK软件框架研究
查看>>
django迁移数据库错误
查看>>
epoll学习01
查看>>
yii 跳转页面
查看>>
闭包问题
查看>>
C#一个FTP操作封装类FTPHelper
查看>>