Verificador de representação com duas moedas coprimas
Descubra se um total exato sai de dois valores de moeda: com moedas de 4 e de 7, o valor 23 é formado por quatro de 4 e uma de 7. Se nenhuma combinação servir, a resposta diz isso claramente. Grátis no seu navegador.
- Grátis
- Funciona no seu navegador
- Sem cadastro
- Seus dados não saem do seu aparelho
Executar grátis
Exemplo resolvido
- Moeda a
- 4
- Moeda b
- 7
- Alvo
- 23
- Quantidade de a
- 4
- Quantidade de b
- 1
O verificador de representação com duas moedas determina se um alvo não negativo pode ser formado com qualquer quantidade não negativa de duas denominações informadas. As denominações precisam ser coprimas, condição que permite resolver o problema com precisão por aritmética modular. Quando o alvo é representável, o resultado traz um par exato de quantidades de moedas; caso contrário, informa claramente que esse par não existe. A ferramenta é útil em experimentos numéricos, exercícios de matemática discreta, projetos de denominações e validação de combinações com tamanho exato sem busca exaustiva.
Defina corretamente o problema das duas moedas
Zero é um alvo válido, pois pode ser produzido usando zero moedas de cada tipo. Uma denominação igual a um também é válida e torna representável todo alvo não negativo. As três entradas devem ser inteiros seguros; valores decimais, textos numéricos, infinitos e inteiros fora da faixa exata do JavaScript são recusados para impedir arredondamentos silenciosos.
As denominações também precisam ser coprimas, isto é, seu máximo divisor comum deve ser um.
Entenda o cálculo modular
Como as denominações são coprimas, a primeira moeda tem um inverso multiplicativo módulo a segunda. Ao subtrair do alvo o valor fornecido por essas primeiras moedas, resta uma diferença. Se a diferença for negativa, não existe representação não negativa.
O método tem tempo logarítmico e evita testar uma longa sequência de quantidades possíveis.
Interprete resultados e erros de entrada
Multiplicar cada quantidade pela denominação correspondente recompõe o alvo. O par retornado é uma solução válida; um alvo suficientemente grande pode ter várias representações, e o verificador não pretende listar nem otimizar todas elas. Uma resposta falsa omite as quantidades porque nenhum par se aplica.
Diferencie um erro de moedas não coprimas de um resultado falso. Falso significa que a entrada respeita o contrato, mas o alvo específico não pode ser formado. Um erro significa que o par de denominações está fora do domínio definido por esta capacidade e, portanto, nenhuma decisão de representabilidade é emitida.
Por exemplo, as moedas 6 e 9 compartilham o fator 3 e são recusadas mesmo quando o alvo é divisível por 3. Essa distinção evita confundir uma violação de domínio com impossibilidade matemática.
Casos de uso
Confira um valor exato de pagamento
Descubra se duas denominações disponíveis formam o total necessário e receba um par de quantidades quando isso for possível.
Valide um exercício de teoria dos números
Teste um alvo para duas denominações coprimas e compare a solução apresentada com seu cálculo manual.
Confirme combinações de tamanho fixo
Modele dois tamanhos coprimos de pacote como moedas e veja se uma quantidade exata pode ser montada sem pacotes parciais.
Perguntas frequentes
Por que as moedas devem ser coprimas?
Esta capacidade adota o contrato de duas moedas coprimas, que garante o inverso modular usado pelo algoritmo direto. Um par com divisor comum maior que um é recusado como entrada inválida.
A ferramenta retorna todas as combinações possíveis?
Não. Ela decide a representabilidade e fornece uma solução quando existe; não lista nem otimiza todos os pares possíveis.
O alvo pode ser zero?
Sim. O zero é representável usando zero moedas de cada denominação.
Posso pagar 23 com moedas de 4 e de 7?
Sim. Quatro moedas de 4 e uma de 7 somam exatamente 23, e essa é a combinação que a ferramenta devolve neste caso. Uma única combinação válida basta para responder que sim.
Qual a diferença entre um “não” e um erro?
Um “não” quer dizer que as moedas são válidas, mas aquele valor exato não pode ser formado. Um erro indica que as moedas têm um fator comum, como 6 e 9, que compartilham o 3, e aí não há resposta sobre o valor.
Ferramentas relacionadas
Para desenvolvedores — acesso via API
Tudo nesta página está disponível via API. Esta seção é para equipes que querem integrar a ferramenta aos próprios sistemas; quem não precisa disso pode simplesmente usar a ferramenta acima.
Endpoint
Autenticação por token Bearer. Um único POST coloca a tarefa na fila; o resultado chega por webhook ou link assinado.
Chame do seu código
curl -X POST https://api.kit.forhosting.com/numth/coin-representable-two \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"coin_a":4,"coin_b":7,"target":23}'const res = await fetch("https://api.kit.forhosting.com/numth/coin-representable-two", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"coin_a": 4,
"coin_b": 7,
"target": 23
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/coin-representable-two",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"coin_a": 4,
"coin_b": 7,
"target": 23
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/coin-representable-two", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"coin_a":4,"coin_b":7,"target":23}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"coin_a":4,"coin_b":7,"target":23}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/coin-representable-two", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Exemplo de requisição
{
"coin_a": 4,
"coin_b": 7,
"target": 23
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.coin_representable_two",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}A API é assíncrona: cada chamada devolve um task_id na hora. Se preferir polling, consulte o status a até 1 requisição por segundo.
Preço
Preço publicado, sem tokens nem créditos escondidos. Tarefa que falha não é cobrada.
Erros
| HTTP | Código | O que significa |
|---|---|---|
401 | unauthorized | Token ausente ou inválido. Confira o header Authorization. |
402 | insufficient_balance | Saldo insuficiente para esta tarefa. Faça uma recarga e tente de novo. |
404 | unknown_type | Esse tipo de tarefa não existe. Confira o campo type no catálogo. |
429 | rate_limited | Muitas requisições em pouco tempo. Espere um instante e tente de novo. |
Notas técnicas
Defina corretamente o problema das duas moedas
Informe duas denominações inteiras positivas em coin_a e coin_b e, em seguida, um alvo inteiro não negativo. O verificador procura inteiros não negativos count_a e count_b para os quais a quantidade da primeira moeda multiplicada por coin_a, somada à quantidade da segunda multiplicada por coin_b, seja exatamente igual ao alvo. Portanto, um resultado representável não indica apenas um valor próximo ou uma combinação abaixo de um orçamento: a igualdade precisa ser exata e nenhuma quantidade pode ser negativa.
Entenda o cálculo modular
O verificador calcula esse inverso com o algoritmo de Euclides estendido e o utiliza para encontrar o único candidato a count_a entre zero e coin_b menos um que satisfaz a congruência necessária. Se ela for não negativa, será divisível por coin_b e produzirá um count_b válido; a resposta inclui as duas quantidades como uma prova concreta. Essa conclusão é completa, e não uma heurística: toda outra solução inteira altera count_a por um múltiplo inteiro de coin_b e altera count_b no sentido oposto por um múltiplo inteiro de coin_a. Como o cálculo começa pelo menor candidato não negativo a count_a, uma diferença negativa não pode ser corrigida sem tornar count_a negativo.
Interprete resultados e erros de entrada
Uma resposta com representable verdadeiro inclui count_a e count_b. O cálculo é determinístico, não usa serviços de rede e apresenta o mesmo resultado para as mesmas entradas inteiras exatas no navegador e na API.
Perguntas técnicas
O que significa um alvo ser representável?
Significa que o alvo é igual a coin_a vezes count_a mais coin_b vezes count_b para quantidades inteiras não negativas.
Um resultado verdadeiro inclui uma combinação?
Sim. A resposta fornece count_a e count_b como uma combinação exata e não negativa que recompõe o alvo.
Quanto custa uma solicitação de API?
Cada solicitação de API custa US$ 0,002. A versão no navegador pode executar localmente o mesmo cálculo determinístico.