我有floor(sqrt(floor(x)))
。这是真的:
floor
是多余的。floor
是多余的。显然,外层不是多余的,因为例如,sqrt(2)
不是整数,因此floor(sqrt(2))≠sqrt(2)
。
也很容易看到sqrt(floor(x))≠sqrt(x)
为非整数x
。由于sqrt
是单调函数。
我们需要找出所有有理数(或实数)的floor(sqrt(floor(x)))==floor(sqrt(x))
。
让我们证明,如果sqrt(n)<m
然后sqrt(n+1)<m+1
,为整数m,n
。很容易看出来
n<m^2 ⇒ n+1 < m^2+1 < m^2+2m+1 = (m+1)^2
因此,由于sqrt
是单调的,我们有这个
sqrt(n) < m -> sqrt(n+1) < m+1 -> sqrt(n+eps)<m+1 for 0<=eps<1
因此floor(sqrt(n))=floor(sqrt(n+eps))
适用于所有0<eps<1
和整数n
。假设另外floor(sqrt(n))=m
和floor(sqrt(n+eps))=m+1
,你有一个案例,sqrt(n)<m+1
然而sqrt(n+eps)>=m+1
。
因此,假设需要外部floor
,内部floor
是多余的。
换句话说,总是如此
floor(sqrt(n)) == floor(sqrt(floor(n)))
内部ceil
怎么样?
很容易看到floor(sqrt(n)) ≠ floor(sqrt(ceil(n)))
。例如
floor(sqrt(0.001))=0, while floor(sqrt(1))=1
但是你可以用类似的方式证明
ceil(sqrt(n)) == ceil(sqrt(ceil(n)))
内在的是多余的,外面的当然不是。
外部不是冗余的,因为如果x是平方数,则数字x的平方根仅产生整数。
内部是冗余的,因为区间[x,x + 1 [(其中x是整数)中任何数字的平方根总是位于区间[floor(sqrt(x)),ceil(sqrt(x))内)[因此,如果您只对结果的整数部分感兴趣,则在取平方根之前不需要对数字进行置位。
直觉上我认为内在的是多余的,但我无法证明。
除非你能提供证明我错误的x值,否则你不能投票给我。 8-)
编辑:请参阅v3对此答案的评论以获得证明 - 谢谢,v3!
内层是多余的
内层是多余的。矛盾的证明:
假设内层不是多余的。那意味着:
floor(sqrt(x)) != floor(sqrt(x+d))
对于某些x和d,其中floor(x)= floor(x + d)。然后我们要考虑三个数字:a = sqrt(x),b = floor(sqrt(x + d)),c = sqrt(x + d)。 b是整数,a <b <c。这意味着a ^ 2 <b ^ 2 <c ^ 2,或x <b ^ 2 <x + d。但如果b是整数,则b ^ 2是整数。因此floor(x)<b ^ 2,并且b ^ 2 <= floor(x + d),然后floor(x)<floor(x + d)。但我们首先假设floor(x)= floor(x + d)。我们已经达成了矛盾,所以我们的假设是错误的,内层是多余的。
如果x是整数,则内层是冗余的。
如果x不是整数,则两者都不是冗余的。
外层不是多余的。反例:x = 2。
楼层(sqrt(楼层(2)))=楼层(sqrt(2))=楼层(1.41 ...)
没有外层,结果将是1.41 ......
如果内层不是多余的,那么我们会期望楼层(sqrt(n))!= floor(sqrt(m)),其中m = floor(n)
注意n - 1 <m <= n。 m总是小于或等于n
floor(sqrt(n))!= floor(sqrt(m))要求sqrt(n)和sqrt(m)的值相差至少1.0
但是,没有值sq,其中sqrt(n)与sqrt(n + 1)相差至少1.0,因为对于0和1之间的所有值,该值的sqrt根据定义<1。
因此,对于所有值n,楼层(sqrt(n))== floor(sqrt(n + 1))。这与最初的假设相矛盾。
因此内层是多余的。
如果n^2 <= x < (n+1)^2
在哪里n
是一个整数,那么
n <= sqrt(x) < n+1
,所以floor(sqrt(x)) = n
;n^2 <= floor(x) < (n+1)^2
,所以n <= sqrt(floor(x)) < n+1
,所以floor(sqrt(floor(x))) = n
。因此,暗示内层的floor(sqrt(floor(x))) = floor(sqrt(x))
是多余的。