Você deve escrever um programa ou função que use um número inteiro não negativo N
como entrada e produza ou retorne dois números inteiros (negativo, zero ou positivo) X
e Y
.
Os inteiros são entendidos no sentido matemático, pois existem infinitamente muitos deles.
A função implementada deve ser bijetiva . Isso significa que, para cada um N
, deve gerar um X
Y
par diferente e cada X
Y
par deve ser emitido para alguma entrada, N
ou seja, todos os seguintes pares devem ser emitidos para alguns N
:
...
┌─────┬─────┬────┬────┬────┐
│-2 -2│-2 -1│-2 0│-2 1│-2 2│
├─────┼─────┼────┼────┼────┤
│-1 -2│-1 -1│-1 0│-1 1│-1 2│
├─────┼─────┼────┼────┼────┤
... │0 -2 │0 -1 │0 0 │0 1 │0 2 │ ...
├─────┼─────┼────┼────┼────┤
│1 -2 │1 -1 │1 0 │1 1 │1 2 │
├─────┼─────┼────┼────┼────┤
│2 -2 │2 -1 │2 0 │2 1 │2 2 │
└─────┴─────┴────┴────┴────┘
...
Observe que U V
e V U
são pares diferentes se U!=V
.
Detalhes
- Se o seu idioma não suportar números inteiros arbitrariamente grandes, tudo bem, mas seu algoritmo deve funcionar com um tipo de dados inteiro arbitrariamente grande. Seu código ainda deve suportar valores de entrada por pelo menos
2^31-1
. - Se você optar por imprimir ou retornar a saída como sequência, não serão permitidos sinais
0
ou+
sinais à esquerda . Caso contrário, a representação inteira padrão do seu idioma está correta.
Exemplo
Se a tarefa seria fazer uma função bijective tomando um número inteiro não negativo N
e saída de um número inteiro X
uma solução poderia ser a função
if (input mod 2 == 0) return N/2 else return -(N+1)/2
,
implementado em algum idioma. Esta função retorna X = 0 -1 1 -2 2...
para N = 0 1 2 3 4...
.
10=>11 12, 9=>10 11
isso é inválido porque 11 é repetido?