java实现快速求A的p次幂算法

算法主要用到了两个公式
A的2M次方等于A的M次方的平方*
A的(M+N)次方等于A的M次方A的N次方*

代码如下

//计算A的p次幂,Math.pow(A,p)
	public static float RaiseToPower(float A,int p) {
		//将迭代的数存在数组里
		float sum = 1;
		float[] a = new float[p];
		a[1] = (float) Math.pow(A, 0);
		for (int n= 1; n+1 <= p; n = 2*n) {
			a[n] = (float) Math.pow(A, n);
		}
		//通过计算p除以2的余数找a数组对应的数
			int[] index = new int[p];
			//这个循环可以优化,不需要循环这么多次,可以logp一下
			for (int i = 0; i < index.length; i++) {
				index[i] = p % 2;
				if(index[i]==1) {
					sum*=a[(int) Math.pow(2, i)];
				}
				p = p/2;
			}
		return sum;
	}

其实代码实现搞复杂了,我的是先把A的0,1,2,4…p次方存放在数组相应的元素里,不是依次存放,A的n次方这个元素存在a[n]里,所以后来寻找元素下标会有点麻烦。

贴一个链接蹭热度
(https://blog.csdn.net/u011590573/article/details/81457797)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值