如何找到由以下关系定义的系列之和T(n + 2)=(Tn + 1)^ 2 + T(n)其中T(0)= 0且T(1)= 1在C语言中

时间:2016-01-05 11:32:30

标签: c algorithm

********** for n< = 10 **********

某些输出甚至可能超出64位整数的范围。 如何找到由以下关系定义的系列之和

T(n + 2)=(T(n + 1)) 2 + T(n)

其中 T(0)= 0 T(1)= 1

*是的它是t(n + 1)平方,,,我的问题是如何存储大数字,如计算T(12)并尝试存储结果,它的结果超出了long long int的范围

3 个答案:

答案 0 :(得分:2)

在64位计算机上使用gcc时,如果128位就足够了:

typedef unsigned int uint128_t __attribute__((mode(TI)));

uint128_t T (int nr) {
     uint128_t t0=0,t1=1,t2,sum = 0;
     while (nr--) {
         t2 = t1*t1 + t0;
         t0 = t1;
         t1 = t2;
         sum += t2;
     }
     return sum;
}

答案 1 :(得分:0)

您需要一个支持任意精度数字的库,例如GMP:https://gmplib.org/

答案 2 :(得分:0)

递归解决方案:

some_big_int_type T(int N) 
{       
    if (N == 0) 
        return 0;
    if (N == 1)
        return 1;
    some_big_int_type Tpow2 = T(N - 1);
    return Tpow2 * Tpow2 + T(N - 2);
}

big_type_int可能是uint128_t作为Ctx回答。