Inspirados em Barato, Rápido, Bom , vamos implementar um algoritmo que possui exatamente dois deles.
A matemática
Dado dois números inteiros diferentes de zero a e b , o GCF d é o maior número inteiro que divide a e b sem deixar resto. Os coeficientes de Bézout são pares de números inteiros (x, y) tais que ax + by = d . Os coeficientes de Bézout não são únicos. Por exemplo, dado:
a = 15, b = 9
Nós temos
d = 3
x = 2
y = -3
Desde a 15*2 + 9*(-3) = 30 - 27 = 3
.
Uma maneira comum de calcular o GCF e um par de coeficientes de Bézout é usar o algoritmo de Euclides , mas não é o único caminho.
O código
Seu programa deve receber dois números inteiros como entradas. Deve gerar / retornar o maior fator comum e um par de coeficientes de Bézout.
Exemplo de entrada:
15 9
saída de exemplo
3 (2, -3)
A saída pode estar em qualquer ordem e formato, mas deve ficar claro qual é o GCF e quais são os coeficientes.
The Underhanded
Seu programa tem potencial para ser barato, rápido e bom. Infelizmente, só podem ser dois deles ao mesmo tempo.
- Quando não é barato , o programa deve usar uma quantidade excessiva de recursos do sistema.
- Quando não é rápido , o programa deve levar uma quantidade excessiva de tempo.
- Quando não está bom , a saída do programa deve estar errada.
O programa deve ser capaz de executar (bem, não executar) todos os três. O que significa quando depende de você - pode ser com base no tempo, no compilador, em qual entrada é maior etc. Algumas notas adicionais:
- Seu programa não deve estar obviamente oculto e deve passar por uma inspeção superficial. Eu ficaria um pouco desconfiado se você implementasse três algoritmos separados.
- No caso barato , "quantidade excessiva de recursos do sistema" é algo que atrasaria outros programas. Pode ser memória, largura de banda, etc.
- No caso rápido , "tempo excessivo" significa em relação à maneira como funciona de maneira barata e boa. casos . O programa ainda deve terminar. Quanto mais perto você puder "incrivelmente frustrante, mas não frustrante o suficiente para interromper o programa", melhor (mais engraçado e).
- No bom caso, a saída não deve estar obviamente errada e deve passar por uma inspeção superficial. Eu ficaria muito desconfiado se isso me desse um GCF de "2 anna half".
Este é um concurso de popularidade, então a maioria dos upvotes ganha!
EDITAR
Para esclarecer, estou procurando programas que podem ser "rápidos e baratos" e "baratos e bons" e "rápidos e bons" em diferentes casos, não aqueles que apenas fazem um deles.
fonte
Respostas:
C
É barato e rápido. Você recebe um CD em um piscar de olhos. No entanto, o cara que fez isso não tinha idéia sobre o "co-algo de Bézier", então ele simplesmente dividiu aeb por gcd. (para piorar as coisas, nesse ponto aeb estão bem longe do valor inicial por causa do algoritmo que ele sabiamente escolheu)
fonte
C #
Isso calcula os coeficientes de Bézout. Eu usei o algoritmo euclidiano estendido .
fonte
Perl 5
Não é barato: main () é chamado recursivamente (preenchendo a pilha) até que um aviso de "recursão profunda" seja disparado pelo perl, que encerrará o aplicativo devido ao manipulador __WARN__.
Não é rápido: quando os algoritmos gcf () retornam resultados corretos, o código permanece por alguns segundos (select () em main ()).
Não é bom: todos os resultados acima de 99 (ou abaixo de -99) estão incorretos.
Em suma, não é tão criativo; ansioso por respostas mais elegantes.
fonte
Pitão
Isso é barato e rápido, mas é ruim porque a faixa é limitada na maior entrada, portanto, pode não encontrar um par de coeficientes.
Bom quebra-cabeça.
fonte
Javascript
Não é barato
Usa muitos recursos do sistema.
Não rápido
Use um retorno de chamada, assim como uma proteção extra contra falhas.
Não é bom
Limite estrito de
gcf(10, 10)
, apenas para espaço em disco seguro.fonte