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

问题描述:

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

+1完美的作品。谢谢 – HeavenCore 2012-03-20 20:44:54

你的序列被用于评估我

x = y*z^i 

创建= 0,1,2,3,...

就可以解决这个为i作为

i = Log[x/y]/Log[z] 

是小心避免采取Log[0]并接受只有我是一个整数的答案,或者因为这是在浮点数字中工作,可接受地是一个整数。如果i是一个整数(在您建立的容差范围内),那么您的x位于该系列中的该位置。