我有以下要求(要在t-sql或crunch中开发 - 一个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
完全可变。
根据X
&和Y
对照序列测试Z
的数学公式是什么? {{1}}?
我将在T-SQL中写这篇文章,但随时可以用任何语言发布答案。我会相应调整。
我正在读这个: http://en.wikipedia.org/wiki/Geometric_progression试图弄明白,但我想在这里问,任何人都已经做过/知道解决方案。
非常感谢。
答案 0 :(得分:3)
您的序列是通过评估
创建的x = y*z^i
表示i = 0,1,2,3,...
您可以将此i
解决为
i = Log[x/y]/Log[z]
小心避免接受Log[0]
并且仅接受i是整数的答案,或者因为这是以浮点数运算,可接受地接近于整数。如果i
是一个整数(在你建立的公差范围内),那么你的x
就在系列中的那个位置。
答案 1 :(得分:2)
那么,纯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