检查变量几何序列中是否存在整数

时间:2012-03-20 20:11:36

标签: sql tsql math clr sequences

我有以下要求(要在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

问题是,XY& Z完全可变。

根据X&和Y对照序列测试Z的数学公式是什么? {{1}}?

我将在T-SQL中写这篇文章,但随时可以用任何语言发布答案。我会相应调整。

我正在读这个: http://en.wikipedia.org/wiki/Geometric_progression试图弄明白,但我想在这里问,任何人都已经做过/知道解决方案。

非常感谢。

2 个答案:

答案 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