Teorema chinês do resto
Resolva congruências simultâneas de uma só vez: x ≡ 2 mod 3, x ≡ 3 mod 5 e x ≡ 2 mod 7 dão x ≡ 23 mod 105. Aceita módulos com fatores comuns e avisa quando o sistema se contradiz. 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
- Restos
- 2, 3, 2
- Módulos
- 3, 5, 7
- Solução x
- 23
- Módulo
- 105
- Produto
- 105
- Quantidade
- 3
O caminho é aritmética inteira pura: sem rede, sem aleatoriedade e sem relógio.
O que diz o teorema chinês do resto
Um sistema de congruências procura um único número x que deixe um resto definido na divisão por vários divisores, chamados módulos. Quando os módulos são coprimos par a par, ou seja, nenhum par compartilha um fator, existe exatamente uma resposta entre zero e o produto dos módulos menos um, e as demais se repetem em saltos desse produto. O exemplo clássico x ≡ 2 mod 3, x ≡ 3 mod 5, x ≡ 2 mod 7 tem a única classe 23 módulo 105.
Como o solucionador trabalha e os erros comuns
O solucionador combina as congruências uma a uma, incorporando cada nova à resposta obtida até ali. Se dois módulos compartilham um fator, ele verifica primeiro se os restos coincidem módulo o máximo divisor comum; se não coincidem, avisa que não há solução. Quando coincidem, a resposta se repete a cada mínimo múltiplo comum dos módulos, e não a cada produto. Os erros típicos são esperar uma resposta única módulo o produto quando os módulos têm fatores comuns, digitar restos e módulos em ordem ou quantidade diferentes e esquecer que um resto negativo é apenas reduzido módulo o seu divisor.
Onde os sistemas CRT aparecem no estudo, na intuição de criptografia e no código
Professores podem gerar gabaritos para planilhas de congruências simultâneas sem confiar em calculadoras opacas que escondem os mdcs intermediários. Desenvolvedores usam o mesmo contrato para validar reconstruções modulares em demonstrações educacionais de RSA, para construir vetores de teste determinísticos para bibliotecas de aritmética modular, e para verificar que um pipeline de resíduos ainda se eleva a uma única classe depois de uma mudança de esquema. A prática de concursos costuma precisar de um solucionador rápido e offline, para que o trabalho manuscrito possa ser verificado em segundos.
Combine esta página com um verificador de coprimos quando você só precisar do mdc de dois inteiros, e com fatoração em primos quando precisar das potências primas por trás de um único módulo, em vez de um sistema simultâneo.
Casos de uso
Congruências simultâneas de tarefas e concursos
Resolva sistemas de livro didático como x ≡ 2 mod 3, x ≡ 3 mod 5, x ≡ 2 mod 7 e verifique a classe única módulo o produto dos módulos.
Perguntas frequentes
Os módulos precisam ser coprimos par a par?
Não. Módulos coprimos par a par sempre geram uma solução única módulo seu produto. Módulos não coprimos são aceitos quando os restos concordam módulo cada mdc; caso contrário, o sistema é rejeitado como inconsistente.
O algoritmo é aleatorizado?
Não. Ele usa CRT sucessivo determinístico com mdc inteiro exato e inversos modulares. Os mesmos restos e módulos sempre resultam no mesmo x e módulo.
Como resolvo x ≡ 2 mod 3, x ≡ 3 mod 5 e x ≡ 2 mod 7?
Digite os restos 2, 3 e 2 e os módulos 3, 5 e 7 na mesma ordem. A resposta é 23, e qualquer número que difira de 23 por um múltiplo de 105 também serve.
O que acontece se as congruências se contradizem?
O solucionador informa que o sistema é incompatível em vez de inventar uma resposta. Só existe solução quando cada par de restos coincide módulo o máximo divisor comum dos dois módulos correspondentes.
Posso usar restos negativos?
Sim. Um resto negativo é reduzido módulo o seu próprio divisor antes do cálculo, de modo que o resultado é o mesmo que você obteria com o resto positivo equivalente.
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/chinese-remainder \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"remainders":[2,3,2],"moduli":[3,5,7]}'const res = await fetch("https://api.kit.forhosting.com/numth/chinese-remainder", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"remainders": [
2,
3,
2
],
"moduli": [
3,
5,
7
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/chinese-remainder",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"remainders": [
2,
3,
2
],
"moduli": [
3,
5,
7
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/chinese-remainder", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"remainders":[2,3,2],"moduli":[3,5,7]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"remainders":[2,3,2],"moduli":[3,5,7]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/chinese-remainder", 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
{
"remainders": [
2,
3,
2
],
"moduli": [
3,
5,
7
]
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.chinese_remainder",
"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
O solucionador do teorema chinês do resto recebe um sistema de congruências simultâneas — x congruente a cada resto a_i módulo cada módulo n_i — e retorna a solução única quando ela existe. Você informa arrays paralelos de restos e módulos; o mecanismo os combina com CRT sucessivo, verifica a consistência quando os módulos compartilham fatores, e informa tanto o representante x entre zero e módulo menos um quanto o módulo da classe solução (o produto dos n_i quando eles são coprimos par a par, ou o mínimo múltiplo comum deles caso contrário).
O que o teorema chinês do resto retorna e quando os sistemas falham
O famoso trio de sala de aula — x ≡ 2 mod 3, x ≡ 3 mod 5, x ≡ 2 mod 7 — resulta em x ≡ 23 mod 105. Esta ferramenta também aceita a forma geral: os módulos não precisam ser coprimos par a par. Classicamente, se os módulos são coprimos par a par, existe exatamente uma classe residual módulo o produto dos n_i que satisfaz todas as congruências ao mesmo tempo. Nesse caso, uma solução existe se e somente se cada par de restos concordar módulo o mdc dos módulos correspondentes, e a solução é única módulo o mínimo múltiplo comum de todos os n_i. Quando os restos discordam, a solicitação falha com invalid_input e uma mensagem que nomeia a inconsistência, em vez de inventar um x falso. A resposta em JSON de sucesso inclui x, modulus (o módulo CRT da classe solução), product (o produto bruto dos módulos de entrada), os remainders reduzidos entre zero e n_i menos um, uma cópia dos moduli, e count. Arrays ausentes, comprimentos desiguais, módulos não positivos, não inteiros, e valores fora da faixa de inteiros seguros também falham com invalid_input, para que células ruins de planilha nunca virem respostas erradas silenciosas.
Como os restos e módulos são lidos e como o CRT sucessivo permanece exato
Todo módulo precisa ser um inteiro positivo seguro. Os restos podem ser negativos e são reduzidos para o intervalo canônico antes da combinação. Internamente, o mecanismo começa pela primeira congruência e repetidamente combina a próxima: dado x ≡ x0 mod m e x ≡ a mod n, ele calcula g igual ao mdc de m e n, rejeita o sistema se a menos x0 não for divisível por g, depois constrói a solução atualizada com um inverso modular de m sobre g módulo n sobre g e multiplica o módulo por n sobre g para obter o novo mmc. Todas as multiplicações são protegidas, para que o produto e o módulo CRT intermediário permaneçam dentro dos inteiros seguros do JavaScript; produtos grandes demais falham claramente em vez de dar a volta. Os campos preferidos são remainders e moduli como arrays JSON de inteiros de comprimento igual. Os apelidos a, ai e residues mapeiam para remainders; n, ni e mods mapeiam para moduli, para que formulários, strings de consulta e notebooks legados possam reutilizar um contrato. Cada entrada pode ser um número inteiro JSON ou uma string decimal com um sinal opcional à esquerda; frações, notação científica e espaços incorporados são rejeitados.
Onde os sistemas CRT aparecem no estudo, na intuição de criptografia e no código
Nesta página, o trabalho roda inteiramente no seu navegador; pela API, cada solução bem-sucedida custa US$ 0,002, a validação com falha não é cobrada, e nada é armazenado depois que a resposta é devolvida.
Casos de integração
Reconstrução modular em demonstrações de ensino
Eleve listas de resíduos de volta a uma única classe inteira ao explicar isomorfismos de anéis, quebra-cabeças de calendário, ou passos CRT educacionais estilo RSA.
Fixtures de teste determinísticas para bibliotecas modulares
Gere soluções CRT reproduzíveis para testes unitários e asserções de CI sem embutir tabelas calculadas à mão que se desviam da implementação.
Perguntas técnicas
Quanto custa o solucionador do teorema chinês do resto?
É gratuito no navegador, nesta página. Pela API, uma solicitação bem-sucedida custa US$ 0,002; entradas inválidas não são cobradas.
O que acontece se o sistema for inconsistente?
A solicitação falha com invalid_input e uma mensagem de que nenhum inteiro x satisfaz o sistema completo, porque os restos discordam módulo o mdc dos módulos.
Restos negativos são permitidos?
Sim. Os restos podem ser negativos; eles são reduzidos para o intervalo de zero a n_i menos um antes da combinação CRT. Os módulos precisam ser inteiros positivos.