次方的快速算法?
次方有两种快速算法:
第一种是直接用乘法计算,例:3⁴=3×3×3×3=81。
第二种则是用次方阶级下的数相乘,例:3⁴=9×9=81
次方最基本的定义是:设a为某数,n为正整数,a的n次方表示为aⁿ,表示n个a连乘所得之结果,如2⁴=2×2×2×2=16。次方的定义还可以扩展到0次方和负数次方等等。
负数次方
由5的0次方继续除以5就可以得出5的负数次方。
例如: 5的0次方是1 (任何非零数的0次方都等于1。)
5的-1次方是0.2 1÷ 5 =0.2
5的-2次方是0.04 0.2÷5 =0.04
因为5的-1次方是0.2 ,所以5的-2次方也可以表示为0.2×0.2=0.04
5的-3次方则是0.2×0.2×0.2=0.008
由此可见,一个非零数的-n次方=这个数的倒数的n次方。
扩展资料:
0的次方
0的任何正数次方都是0,例:0⁵=0×0×0×0×0=0
0的0次方无意义。
一个数的0次方
任何非零数的0次方都等于1。原因如下:
通常代表3次方
5的3次方是125,即5×5×5=125
5的2次方是25,即5×5=25
5的1次方是5,即5×1=5
由此可见,n≧0时,将5的(n+1)次方变为5的n次方需除以一个5,所以可定义5的0次方为:
5 ÷ 5 = 1。
2024-04-02 广告
譬如计算x^y,可以先算出x^(y/2)
然后再自乘一次,如果y是奇数,那就再额外乘一次y
对于x^(y/2),我们仍用上述方法递归计算,可以得到logy复杂度的算法
以下是循环写法,效率比递归写法略高一些
int pow(int x,int y)
{
int ans=1;
while(y)
{
if(y)ans*=x;
x*=x;
y>>=1;
}
return ans;
}
2013-09-16
2^55=2^10 * 2^10 * 2^10 * 2^10 * 2^10 * 2^5
2^10=1024
因为1024比较好列竖式
乘起来比较方便
个人见解,仅供参考
2018-04-10
{
int m=0;
m=n;
int t=1;
while(m>0)
{
m/=2;
t*=2;
}
m=n;
int y=1;
while(t>1)
{
t/=2;
y*=y;
if (m>=t)
{
y*=x;
m-=t;
}
}
return y;
}