[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[obm-l] k-ésimo numero da sequencia (solução)



Alô pessoal!

Após arremessar a minha cabeça várias vezes contra a parede consegui encontrar um algoritmo para encontrar o dito cujo k-ésimo número da tal sequência. Nao se preocupem, foi só força de expressão...

Lá vai...

Observem que os números da forma 2^a*3^b*5^c com a, b, c, inteiros não negativos podem ser divididos em 7 conjuntos disjuntos, a saber:

A = {2^a, a > 0}, B = {3^b, b > 0}, C = {5^c, c > 0}, D = {2^a*3^b, a > 0 e b > 0},

E = {2^a*5^c, a > 0 e c > 0}, F = {3^b*5^c, b > 0 e c > 0},

G = {2^a*3^b*5^c, a > 0 e b > 0 e c > 0}. Pois bem...

Aqui esta o algoritmo..:

Input k

U(1) = 1

se k > 1 entao

      chamemos os numeros 2, 3, 5, 6, 10, 15, 30 de numeros base dos conjuntos A, B, C, D, E, F, G respectivamente...

      a <- 2

      b <- 3

      c <- 5

      d <- 6

      e <- 10

      f <- 15

      g <- 30

      n <- 2

 (1) escolha o menor numero entre a, b, c, d, e, f, g para ser o enesimo termo da sequencia, o U(n)

      este numero escolhido, x, irá pertencer a um dos sete conjuntos mencionados acima, digamos X...

      multiplique o numero base de X por um numero da propria sequencia, o menor possivel, y, mas que ainda nao tenha sido escolhido para multiplicar um numero de X anteriormente, de modo que o resultado continue a pertencer a X e faca x ter o valor deste produto

Obs..:  y ja tera sido calculado ...

      n <- n+1

      se n <= k entao retorne para (1)

fim-se

retorne U(k)

Fim.

se alguém encontrar outra solucao nao deixe de mandar pra lista...

caso o algoritmo tenha ficado ambiguo posso manda-lo escrito em uma linguagem formal (uma linguagem de programacao)...

entao poderiamos achar o decimo numero deste modo..:

U(1) = 1

(2, 3, 5, 6, 10, 15, 30) => U(2) = 2

(4, 3, 5, 6, 10, 15, 30)

(4, 3, 5, 6, 10, 15, 30) => U(3) = 3

(4, 9, 5, 6, 10, 15, 30)

(4, 9, 5, 6, 10, 15, 30)  => U(4) = 4

(8, 9, 5, 6, 10, 15, 30)

(8, 9, 5, 6, 10, 15, 30) => U(5) = 5

(8, 9, 25, 6, 10, 15, 30)

(8, 9, 25, 6, 10, 15, 30) => U(6) = 6

(8, 9, 25, 12, 10, 15, 30)

(8, 9, 25, 12, 10, 15, 30) => U(7) = 8

(16, 9, 25, 12, 10, 15, 30)

(16, 9, 25, 12, 10, 15, 30) => U(8) = 9

(16, 27, 25, 12, 10, 15, 30)

(16, 27, 25, 12, 10, 15, 30) => U(9) = 10

(16, 27, 25, 12, 20, 15, 30)

(16, 27, 25, 12, 20, 15, 30) => U(10) = 12

Valeu!

 



Busca Yahoo!
O serviço de busca mais completo da Internet. O que você pensar o Yahoo! encontra.