Coisas a saber:
Primeiro, números da sorte.
Os números da sorte são gerados da seguinte forma:
Pegue todos os números naturais:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20...
Em seguida, remova cada segundo número.
1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21, 23, 25, 27, 29, 31, 33, 35, 37, 39...
Agora 3
está seguro.
Remova cada terceiro número:
1, 3, 7, 9, 13, 15, 19, 21, 25, 27, 31, 33, 37, 39, 43, 45, 49, 51, 55, 59...
Agora 7
está seguro.
Remova todos os sétimos números.
Continue e remova todo n
número de th, onde n
está o primeiro número seguro após uma eliminação.
A lista final de números seguros são os números da sorte.
Os números azarados são compostos por listas separadas de números [U1, U2, U3... Un]
.
U1
é o primeiro conjunto de números removido dos "candidatos" sortudos, então eles são:
2, 4, 6, 8, 10, 12, 14, 16, 18, 20...
U2
é o segundo conjunto de números removido:
5, 11, 17, 23, 29, 35, 41, 47, 53, 59...
E assim por diante ( U3
a terceira lista, U4
a quarta etc.)
Desafio:
Sua tarefa é, ao receber duas entradas m
e n
gerar o m
número th na lista Un
.
Exemplos de entradas e saídas:
(5, 2) -> 29
(10, 1) -> 20
Especificações:
- Seu programa deve funcionar para
m
até1e6
en
até100
.- Você tem a garantia de que ambos
m
en
números inteiros positivos. - Se você está curioso,
U(1e6, 100)
=5,333,213,163
. (Obrigado @pacholik!)
- Você tem a garantia de que ambos
- Seu programa deve calcular isso dentro de 1 dia em um computador moderno razoável.
Isso é código-golfe , então o código mais curto em bytes vence!
PS: Seria bom se alguém apresentasse uma fórmula geral para gerá-las. Se você tem uma fórmula, coloque-a na sua resposta!
(1e6,1e6)
?
n=1
caso? Como isso é especial - para todos os outros casos, o índice baseado em 0 do próximo número da sorte é n-1
.