快速幂
来源:互联网 发布:linux系统的基本命令 编辑:程序博客网 时间:2024/04/19 07:00
二进制快速幂
一般这个就够了
int mpow(int a,int b){ int rt=1; for(rt;b;a*=a,b>>=1){ if(b&1) rt*=a; } return rt; }
【这段代码打起来真是得心应手啊】
十进制快速幂
有一次考试考到了,就去了解了这个东西
#include<cstdio>#include<cstring>#define ll long longusing namespace std;char str[100005];int const mod = 1e9+8;ll power(ll a,ll b){ ll ans=1; for(ans;b;b>>=1,a=a*a%mod){ if(b&1){ ans=ans*a%mod;// b--; } } return ans; }ll mpow(int a){ int len=strlen(str); ll ans=1; while(len!=0){ int k=str[len-1]-'0'; ans=ans*power(a,k)%mod; a=power(a,10)%mod; len--; } return ans;}int main(){ freopen("power.in","r",stdin); freopen("power.out","w",stdout); scanf("%s",str); printf("%I64d\n",mpow(3)); return 0;}
矩阵快速幂
struct Matrix{ const int maxn = 2; int mat[maxn][maxn]; void unit(){ for(int i=0;i<maxn;i++) for(int j=0;j<maxn;j++) mat[i][j]=(i==j); } void zero(){ for(int i=0;i<maxn;i++) for(int j=0;j<maxn;j++) mat[i][j]=0; }};Matrix operator *(Matrix a,Matrix b){ Matrix c;c.zero(); for(int k=0;k<maxn;k++) for(int i=0;i<maxn;i++) for(int j=0;j<maxn;j++) c.mat[i][j]=(c.mat[i][j]+a.mat[i][k]*b.mat[k][j])%mod; return c;}Matrix mpow(Matrix a,int b){ Matrix rt; for(rt.unit();b;b>>=1,a=a*a) if(b&1) rt=rt*a; return rt;}
阅读全文
0 0
- 快速矩阵快速幂
- 快速幂,快速幂取模
- 快速幂 + 快速幂取模
- 快速幂 快速幂取模
- 快速幂&&快速乘法
- 快速幂&快速乘
- 快速幂 快速乘法
- 快速幂 快速幂取模
- 快速幂+快速乘法
- 【快速幂】【快速幂取模】
- 快速乘法-快速幂
- 快速乘/快速幂/矩阵快速幂
- 快速乘 快速幂 矩阵快速幂
- 快速幂,快速幂取模,矩阵快速幂
- 快速幂
- 快速幂
- 快速幂
- 快速幂
- FAFU OJ 删除子串
- AsyncHttpClient上传文件到服务器 注意6.0权限
- LeetCode 287. Find the Duplicate Number
- 一个牛逼的页面动画(Spruce )
- Logstash实践: 分布式系统的日志监控
- 快速幂
- jclasslib
- C# 调用 C++ DLL方法
- skyline 剖面分析MeasureTerrainProfile
- Spring MVC 静态文件处理
- 常见数据结构整理总结
- Android Studio2.2 配置NDK
- JS微信公众号支付开发
- Swift 内存管理与循环引用问题(weak、unowned)