2012-03-20 92 views
0

我有以下要求(將在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想要弄明白,但我想我會問這裏,因爲任何人已經做到了/知道解決方案。

非常感謝。

回答

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 
+0

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

3

你的序列被用於評估我

x = y*z^i 

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

就可以解決這個爲i作爲

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

是小心避免採取Log[0]並接受只有我是一個整數的答案,或者因爲這是在浮點數字中工作,可接受地是一個整數。如果i是一個整數(在您建立的容差範圍內),那麼您的x位於該系列中的該位置。

相關問題