如何找到由以下关系T(n+;2)=(Tn+;1)^2+;在C语言中,T(0)=0和T(1)=1
**********对于n您需要一个支持任意精度数字的库,如GMP,例如:递归解决方案:如何找到由以下关系T(n+;2)=(Tn+;1)^2+;在C语言中,T(0)=0和T(1)=1,c,algorithm,C,Algorithm,**********对于n您需要一个支持任意精度数字的库,如GMP,例如:递归解决方案: 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\u type\u int可以作
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\u type\u int
可以作为Ctx答案uint128\u t
。用于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;
}
是T(n+1)^2吗?另外,你的问题是什么还不清楚。是因为太大的价值吗?你有什么要计算的吗?@ Bathsheba,我是工程师:D,不含糊,因为语句没有意义,如果你EVAL(n+1)1,你需要考虑的最大值是什么?<代码> N>代码>如果128位就足够了,如果您的平台支持gcc和
uint128\t
,那么您可以尝试使用它。如果问题在于如何编写代码来查找您要查找的值,那么关系将为您提供递归实现的代码。如果问题是找到这个表达式的封闭形式,那么最好使用math.SE.Tpow2*Tpow2-T(N-2)+T(N-2)代码>(+和分号)。这就是T(N),不是T(0)+。。。T(N)@mikedu95我什么都没得到?!在包含返回的行中,在Tpow2*Tpow2和T(N-2)之间,它应该是+而不是-。你错过了那行末尾的分号。此外,这计算出T(N),这不是本文的目标。要计算的值为T(0)+T(1)+…+对于给定的N,T(N)。关于-,以及关于sum+=t2
:)@mikedu95 Argh,fixed;)之后的simicolonsemicolon,您是对的@Danh内置类型(如果可用)是\uu uint128\u t
,因此这不会影响使用64位数学正确计算t(0)。。。T(8)
。使用非标准的uint128\u t
将范围扩展1到t(0)。。。T(9)
@chux这并不奇怪,因为将一个数字移到平方大约会使其表示所需的位数翻倍。@egur等人:GMP就是答案。链接是关于GMP的更多信息-你希望作者做什么,包括GMP的源代码?