(岩浆)[Isqrt(n):n in[0..100]];
(PARI){a(n)=如果(n<0,0,地板(sqrt(n))};
(PARI){a(n)=如果(n<0,0,sqrtint(n))};
(哈斯克尔)
导入数据。位(shiftL,shiftR)
a000196::整数->整数
a000196 0=0
a000196 n=牛顿n(findx0 n 1),其中
--求x0==2^(a+1),使4^a<=n<4^(a+1)。
findx0 0 b=b
findx0 a b=findx0(a`shiftR`2)(b`shiftL`1)
牛顿n x=如果x'<x,则牛顿n x'否则x
其中x'=(x+n`div`x)`div`2
a000196_list=concat$zipWith replicate[1,3..][0….]
--莱因哈德·祖姆凯勒2012年4月12日,2010年10月23日
(蟒蛇)
#从http://code.activestate.com/recipes/577821-integer-square-root-function/
定义A000196号(n) 公司名称:
如果n<0:
raise ValueError('仅为非负n'定义)
如果n==0:
返回0
a,b=divmod(n位_length(),2)
j=2**(a+b)
如果是真的:
k=(j+n//j)//2
如果k>=j:
返回j
j=k
打印([A000196号(n) 对于范围(102)]内的n)
#杰森·金伯利2016年11月9日
(方案)
;; 下面的实现使用了来自myintseq库的高阶函数LEFTINV-LEASTMONO-NC2NC。它返回任何严格增长函数的最小单调左逆(有关定义,请参见注释部分),尽管它的收敛速度不如许多专门的整数平方根算法,但至少它不涉及任何浮点运算。因此,使用正确实现的bignum,即使使用非常大的参数,它也会产生正确的结果,而不是只使用(sqrt n)。
;; LEFTINV-LEASTMONO-NC2NC的源可以在下面找到https://github.com/karttu/IntSeq/blob/master/src/Transforms/Transforms-core.ss以及A000290型在该条目下给出。
(定义A000196号(LEFTINV-LEASTMONO-NC2NC 0 0A000290型)) ;;安蒂·卡尔图宁2017年10月6日
|