快速幂

例如求a^b,最原始的方法就是不断地乘a,复杂度为O(b)。
当b很大时就要用到快速幂的思想。
比如说a=2,b=100显然这是一个很大的数(=1267650600228229401496703205376)。
当然我们这里简化一下,求结果的后四位数(只要用10000取余数就行了)。
100的二进制为 1 1 0 0 1 0 0
就是64+32+4 (2^6 +2^5 +2^2)。
快速幂的思想就是判断1100100的每一位是否为1,如果是1,就乘对应的二进制次幂。复杂度为O(lgb)。

long long firstpow(long long base,long long pow)
{
	long long ans=1;
	while(pow)
	{
		if(pow&1)//if(pow%2==1)
		{
			ans=(ans*base)%10000;
		}
		pow>>=1;//pow=pow/2
		base=(base*base)%10000;
	}
	return ans;
}


然后看一下结果如下:

posted @   f_string  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示