不用乘法计算幂

JOJ 2042是一个程序理解题,其中给出了一段奇妙的计算x^3的程序。它的原理如下:

不用乘法计算幂_第1张图片

由上可知,幂函数的增加量第次加6,其初始值为1.所以,就可以把程序写成这样来计算立方:

int f(int x)
{
    int c = 0, d = 1, e = 6;
    while(x--)
    {
        c += d;
        d += e;
        e += 6;
    }
    return c;
}

同理,根据这个思路,还可以写出计算平方的类似的程序:

x2-(x-1)2=2*x-1 , 平方函数的增加量,初始值为1

2*x-1 – [2*(x-1)-1]=2 ,平方函数增加量的增加量,是常数2

所以下面这个程序可以计算输入的正整数的平方:

#include <stdio.h>

int f(int x) {
    int c = 0, d = 1;
    while(x--) {
       c += d;
       d += 2;
    }
    return c;
}

int main() {
    int n;
    while(scanf("%d", &n), n) {
       printf("%d/n", f(n));
    }
    return 0;
}

关于此有因式分解公式:an-bn=(a-b)(an-1+an-2b+…+abn-2+bn-1),理论上应该都可以计算。

你可能感兴趣的:(不用乘法计算幂)