Melhor resposta
Visto que isso é perguntado no tópico Engenharia de Software, talvez possamos discutir a representação.
Oito bits de dados (onde um bit é uma chave que representa 1 ou 0) podem conter um inteiro sem sinal da seguinte maneira:
0 = 00000000
1 = 00000001
2 = 00000010
4 = 00000100
8 = 00001000
16 = 00010000
256 = 10000000
511 = 11111111
Assim, nossos 8 bits de dados podem conter um inteiro sem sinal de até 255 e tão pequeno quanto 0. No entanto, os aplicativos do mundo real podem exigir números negativos, bem como números positivos.
Para acomodar inteiros com sinal, precisamos abrir mão de parte do nosso armazenamento. Existem vários esquemas que fazem isso.
O esquema mais simples seria usar o primeiro bit para representar o sinal (digamos que zero é positivo e 1 é negativo). Isso tem a conseqüência divertida de ter um valor zero positivo e um negativo.
+ 0 = 00000000
- 0 = 10000000
1 = 00000001
- 1 = 10000001
+ 2 = 00000010
- 2 = 10000010
+ 64 = 01000000
- 64 = 11000000
+127 = 01111111
Isso nos permite armazenar números de -127 a +127 que são 255 números (incluindo 0).
Outra maneira de fazer isso é usando o que é chamado de uns-complemento armazenamento. Para isso, o número negativo é a sequência de bits oposta ao número positivo.
Por exemplo:
0 = 00000000
0 = 11111111
2 = 00000010
- 2 = 11111101
A aritmética com números negativos nos permite somar os dois números. Por exemplo, 2 + -2 torna-se
+ 2 = 00000010
-2 = 11111101
--------------
= 11111111
que vimos anteriormente era zero. Portanto, o intervalo que podemos armazenar nesta representação com 8 bits são os inteiros entre -127 e +127, ou 255 números (já que incluímos zero como um único número).
Já que o negativo de zero é zero , ainda há duas representações de zero. Isso é um pouco desperdício, então, para contornar isso, complemento de dois é usado. Isso pega o número negativo de complemento de um e adiciona um. Nesta representação
0 = 00000000
2 = 00000010
- 2 = 11111110
- 1 = 11111111
1 = 00000001
-128 = 10000000
127 = 01111111
-127 = 10000001
Portanto, o intervalo que podemos armazenar nesta representação com 8 bits são os inteiros entre -128 e +127, ou 256 números no total. O uso desse esquema nos permite usar de maneira mais eficaz todas as combinações, o que pode ser muito importante se quisermos fazer o melhor uso dos recursos que representam coisas fundamentais como inteiros com sinal.
Existem outros formados de com sinal representações de inteiros que podem ser vistas em Representações de números assinados – Wikipedia .
Resposta
Primeiro, nenhuma solução com nenhum dos dois número igual a zero.
Se ambos forem zero, os dois lados são indefinidos. (Você pode chamar isso de solução se quiser – não vou.)
Se um é zero e o outro é positivo, então um lado é zero e o outro é um.
Se um é zero e o outro é negativo, então um lado é um e o outro é indefinido.
Agora, considerando apenas números inteiros positivos, é claro que a = b funciona.
Para outras soluções, pegue o logaritmo natural de ambos os lados (sem problemas, já que ambos os lados são positivos) e obtemos
b ln (a) == a ln (b)
Divida os dois lados por a e ln (a) (sem problemas, estamos considerando inteiros positivos apenas no momento), obtemos
(b / a) == ln (b) / ln ( a) == ln (a * (b / a)) / ln (a) == [ln (a) + ln (b / a)] / ln (a) == 1 + ln (b / a) / ln (a)
Reorganizar para
(b / a) -1 == ln (b / a) / ln (a)
Multiplique os dois lados por ln (a) e divida ambos os lados por (b / a) -1 para obter
ln (a) == ln (b / a) [(b / a) -1]
Observe que esta é a divisão por zero se a = b, mas já consideramos esse caso. Portanto, isso é válido apenas para a> 0, b> 0 e a b. Agora dê o nome b / aa, chame-o de x = b / a.
Portanto, temos
ln (a) == ln (x) / (x-1)
Observe que o lado esquerdo é sempre positivo, a menos que a == 1, caso em que precisamos de x == 1 (o lado direito pode ser definido pela continuidade para cobrir x = 1, e é igual a 1 neste ponto). Mas se x == 1, então a = b, então a derivação desta equação era inválida, e nós já consideramos a = b de qualquer maneira.
Portanto, o lado esquerdo é positivo para a> 1, mas tudo bem, porque o lado direito é sempre positivo para x positivo.Mas podemos pensar nos casos de ln (a) 1, separadamente. (ln (a) = 1 não ocorre para valores inteiros de a.)
Para ln (a) , temos
ln (x) / (x-1 ) .
Se x> 1, então o numerador e o denominador são positivos, de modo que
ln (x) -1, que é sempre o caso. Mas se x , então o numerador e o denominador são negativos, de modo que
ln (x)> x-1
Esse nunca é o caso para a função logaritmo. Portanto, se ln (a) 1. (Não há necessidade de considerar x = 1, pois já cobrimos a = b.)
E se ln (a)> 1? Então
ln (x) / (x-1)> 1
Se x> 1, então o numerador e o denominador são positivos, de modo que
ln ( x)> x-1
Esse nunca é o caso. Se x , então o numerador e o denominador são negativos, de forma que
ln (x) -1
Este é sempre o caso. Portanto, se ln (a)> 1, precisamos de x .
Portanto, para inteiros positivos com a b, temos dois casos a considerar. Um é
ln (a) 1
e o outro é
ln (a)> 1 e x
Vamos pensar sobre isso. Existe apenas um a> 1 (já consideramos a = 1) tal que ln (a) , e esse é a = 2. Então, o x correspondente é dado por
ln (2) == ln (x) / (x-1)
Um palpite (e uma das outras respostas já tem isso solução) é x = 2. Mas x = b / a e a = 2, então se x = 2, então a = 4. Observe que não pode haver solução para qualquer outro valor de x, já que ln (x) / (x-1) é uma função estritamente decrescente para x> 0.
O outro caso é ln (a) > 1, mas neste caso, temos x . Isso significa b / a ou b
Então, se houver uma solução de número inteiro positivo, os dois valores aeb são iguais ou um deles é 2 e o outro é 4.
Não há soluções envolvendo a = 0 ou b = 0, a menos que você queira chamar a = b = 0 de solução, com base em que undefined é igual a undefined, mas Não quero tirar minha licença de matemática.
Podemos ter soluções negativas. Bem, suponha que a 0 (sabemos que não podemos ter b = 0), então a ^ b é um inteiro, mas b ^ a é apenas um inteiro se a = -1. Mas então a ^ b é -1 se b for ímpar e +1 se b for par. b ^ a é positivo, então não podemos ter a = -1 e b ímpar. Mas se b é par, então a ^ b é 1, e b ^ a não é igual a um. Portanto, não podemos ter a 0. Pelo mesmo motivo, não podemos ter a> 0 e b .
Podemos ter a e b ? Nesse caso, a ^ b é positivo se b for par e negativo se b for ímpar. Da mesma forma, b ^ a é positivo se a for par e negativo se a for ímpar. Portanto, para que os dois sejam iguais, precisamos que aeb sejam ímpares ou que aeb sejam pares.
Suponha que eles sejam ímpares. Então, começando com
a ^ b == b ^ a
Nós multiplicamos ambos os lados por um negativo e reorganizamos um pouco, obtendo
(-a) ^ b == (-b) ^ a
Tomando recíprocos de ambos os lados, temos
(-a) ^ (- b) == (-b) ^ (- a)
Mas se a e b 0 e -b> 0, e já determinamos que as únicas soluções positivas para -a e -b com ambos ímpares são quando -a = -b ou a = b. Portanto, se aeb são o mesmo inteiro ímpar negativo, a igualdade é mantida. Se qualquer um deles for um inteiro ímpar negativo, mas a b, então não é uma solução.
E se a e b forem inteiros pares negativos? Então obtemos
(-a) ^ b == (-b) ^ a
sem multiplicar ambos os lados por -1. Tomando recíprocos de ambos os lados, temos
(-a) ^ (- b) == (-b) ^ (- a)
Já sabemos as soluções onde -a > 0 e -b> 0 e ambos são inteiros positivos; ou -a = -b, ou -a = 2 e -b = 4, ou -a = 4 e -b = 2.
Isso cobre todos os casos. Portanto, a lista completa de soluções inteiras é
aeb são o mesmo número inteiro positivo ou negativo (mas não zero)
a = 2 e b = 4
a = 4 e b = 2
a = -2 e b = -4
a = -4 e b = -2