快速幂入门和矩阵快速幂

本文介绍了快速幂算法的原理和矩阵快速幂在解决斐波那契数列问题上的应用,通过取模避免溢出,以O(log n)的时间复杂度求解大整数幂运算,适合C语言编程环境。
摘要由CSDN通过智能技术生成

零、取模

在计算结果很大时,如果要展示完整的答案需要手写高精度(即大整数储存和运算),比较复杂而且淡化了题目考查的知识。所以常常只比较程序的得数与标准答案在某个质数下的模是否相等来判断结果是否正确。因此计算过程中需要常常取模防止溢出。
以下程序中默认mod为模数,如998244353或1000000007。

一、什么是幂:

普通算法计算 a n a^n an时一般为循环n次,每次乘以a。比如

	ans=1;
	for(i=0;i<n;i++)
	{
   
		ans=ans*a%mod;
	}

时间复杂度时O(n)

二、快速幂

当题目要求计算 x 1 0 10 x^{10^{10}} x1010时,需要 1 0 10 10^{10} 1010次运算,普通电脑需要很久才能有结果。而快速幂可以在O(log n)的时间复杂度内算出结果。
n的二进制表示为 ( a m . . . a 2 a 1 a 0 ) 2 (a_m...a_2a_1a_0)_2 (am...a2a1a0)2,即
n = a m ∗ 2 m + . . . + a 1 ∗ 2 1 + a 0 ∗ 2 0 n=a_m*2^{m}+...+a_1*2^{1}+a_0*2^0 n=am2m+...+a121+a02

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值