无心人 发表于 2021-1-6 15:59:30

有点需要明确,就是平方根什么时候取整操作似乎可以影响最后结果吧
比如假设sqrt(x, m)表示m次平方根,
int(x)表示取整, isqrt(x, m)表示m次整数平方根
会不会
int(sqrt(x, m)) != isqrt(x, m)

mathe 发表于 2021-1-6 20:09:21

假设存在整数u,m使得
$u^{2^m}\le x \lt (u+1)^{2^m}$,
于是很显然可以递归得出 $u^{2^{m-h}}\le "isqrt"(x,h)\lt (u+1)^{2^{m-h}}$。
所以最终得到$u\le "isqrt"(x,m)\lt u+1$,所以$"isqrt"(x,m)=u="int"("sqrt"(x,m))$

当然如果计算精度不够,双方可能会出现区别。
比如假设小数点后只有两位计算精度
那么$"sqrt"(251,3) = 251^{1/8} = 1.995...$,被计算为$2.00$
而$\sqrt{251}=15.84,\sqrt{15.84}=3.98, \sqrt{3.98}=1.99$.
所以如果在一台只有两位十进制精度的机器上,可以计算得出$"isqrt"(251,3)=2$,但是$"int"("sqrt"(251,3))=1$
页: 1 [2]
查看完整版本: 阶乘和开平方