检查整数是否存在于变量几何序列中
问题描述:
我有以下要求(将在t-sql或紧缩中开发 - CLR)。检查整数是否存在于变量几何序列中
我需要检查给定数字(X
)是否存在于一个数字序列中,其中数字序列根据起始数字(Y
)和乘数(Z
)可变。
看看下面的例子:
Y = 5
Z = 2 (known as the 'common ratio' in the math-world i think)
顺序是,5, 10, 20, 40, 80
&等
然后我需要检查是否存在给定的顺序X
。
问题是,X
,Y
& Z
是完全可变的。
将根据Y
& Z
对测序X
进行测试的数学公式如何?
我会在T-SQL中写这个,但随时可以发布任何语言的答案&我会做相应的调整。
我正在阅读的是: http://en.wikipedia.org/wiki/Geometric_progression想要弄明白,但我想我会问这里,因为任何人已经做到了/知道解决方案。
非常感谢。
答
好了,一个纯粹的SQL解决方案是
with anchor as (
select @y as num
),
progression as (
select num from anchor
union all
select num * @z from progression where num * @z <= @x
)
select case when exists (select 0 from progression where num = @x) then 1 else 0 end
答
你的序列被用于评估我
x = y*z^i
创建= 0,1,2,3,...
就可以解决这个为i
作为
i = Log[x/y]/Log[z]
是小心避免采取Log[0]
并接受只有我是一个整数的答案,或者因为这是在浮点数字中工作,可接受地是一个整数。如果i
是一个整数(在您建立的容差范围内),那么您的x
位于该系列中的该位置。
+1完美的作品。谢谢 – HeavenCore 2012-03-20 20:44:54