Проверка существования целого числа в переменной геометрической последовательности - PullRequest
0 голосов
/ 21 марта 2012

У меня есть следующее требование (для разработки в 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 являются полностью переменными.

Какой будет математическая формула для проверки X против последовательности, основанной на Y & Z?

Я напишу это на T-SQL, но не стесняйтесь публиковать ответ на любом языке, и я буду соответствующим образом адаптироваться.

Я сейчас читаю это: http://en.wikipedia.org/wiki/Geometric_progression, чтобы попытаться выяснить это, но подумал, что я спрошу здесь, если кто-нибудь уже сделал это / знает решение.

Большое спасибо.

Ответы [ 2 ]

3 голосов
/ 21 марта 2012

Ваша последовательность создана путем оценки

x = y*z^i

для i = 0,1,2,3, ...

Вы можете решить эту проблему для i как

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

будьте осторожны, чтобы не брать Log[0] и принимать только ответы, в которых i является целым числом, или поскольку это работает с числами с плавающей запятой, приемлемо близкими к целому числу. Если i является целым числом (в пределах установленного вами допуска), тогда ваш x находится в этой позиции в ряду.

2 голосов
/ 21 марта 2012

Ну, чисто 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...