快速幂
快速幂
分治法((指数折半法, O ( log 2 n ) O(\log_2 n) O(log2n))
思想:不断 n ≫ 1 n\gg1 n≫1,每次将指数折半计算
例: a 4 = ( ( a ) 2 ) 2 a^4=((a)^2)^2 a4=((a)2)2, a 5 = ( a 2 ∗ a 2 ) ∗ a a^5=(a^2*a^2)*a a5=(a2∗a2)∗a
extern long long a,mod;
long long fastpow(long long n){
if(!n) return 1;//特判指数为0
long long t=fastpow(n>>1);//不断向下折半指数
if(n&1) return ((t*t)%mod*a)%mod;//奇数情形,注意每一步都要取模
else return (t*t)%mod;
}
二进制法(指数倍增法, O ( log 2 n ) O(\log_2 n) O(log2n))
思想:将指数拆分成2为底数倍增
例: ( 11 ) 10 = ( 1011 ) 2 = 1 × 2 3 + 0 × 2 2 + 1 × 2 1 + 1 × 2 0 = 8 + 2 + 1 → a 11 = a 8 + 2 + 1 = a 8 ∗ a 2 ∗ a 1 (11)_{10}=(1011)_2=1\times2^3+0\times2^2+1\times2^1+1\times2^0=8+2+1\rightarrow a^{11}=a^{8+2+1}=a^8*a^2*a^1 (11)10=(1011)2=1×23+0×22+1×21+1×20=8+2+1→a11=a8+2+1=a8∗a2∗a1
extern long long a,mod,n;
long long fastpow(){
long long ans=1;
for(;n;n>>=1){//对n进行按位操作,并逐位右移
if(n&1) ans=(a*ans)%mod;//判断二进制最后一位是否为1,是否需要乘
a=(a*a)%mod;//平方进行倍增:a^2,a^4,a^8...
}
return ans;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具