Teste de primalidade Solovay-Strassen com base escolhida
Com 13 e base 2, os dois restos dão 12, então 13 passa no teste e é provável primo para a base 2. Se os restos fossem diferentes, ficaria provado que o número é composto. 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
- N
- 13
- Primeiro texto
- 2
- Gcd
- 1
- Símbolo de Jacobi
- -1
- Resto de Euler
- 12
- Resto esperado
- 12
O teste de primalidade de Solovay-Strassen verifica se um inteiro ímpar se comporta como primo para uma base escolhida por você. Ele calcula o símbolo de Jacobi da base módulo o candidato, eleva essa base à metade do candidato menos um e compara os dois valores módulo o candidato. O resultado identifica uma testemunha definitiva de composição ou informa que o número é provavelmente primo para essa base. As entradas são strings decimais, preservando inteiros grandes com exatidão, sem arredondamento de ponto flutuante.
O significado da comparação
Para um primo ímpar n e qualquer base a que não seja divisível por n, o critério de Euler afirma que a elevada a (n - 1) / 2 é congruente, módulo n, ao símbolo de Legendre de a. O símbolo de Jacobi estende esse cálculo a candidatos compostos ímpares, permitindo calculá-lo de modo eficiente sem conhecer a fatoração de n. Solovay-Strassen compara a potência modular com o símbolo de Jacobi representado como resíduo: 1 continua sendo 1, enquanto -1 se torna n - 1.
Uma divergência prova matematicamente que n é composto. Outra base válida pode revelar um composto que passou na primeira comparação. A resposta inclui os dois resíduos, o valor de Jacobi e o máximo divisor comum, para que você possa examinar a decisão em vez de receber um resultado booleano sem justificativa.
Como escolher e validar as entradas
Forneça n e a como strings decimais sem sinal. O candidato n deve ser ímpar e ter valor mínimo de 3; valores pares ou menores retornam erro de entrada inválida por estarem fora do domínio declarado. A base deve satisfazer 1 < a < n.
Você não precisa verificar antes se os números são coprimos: a capacidade calcula gcd(a, n), e um fator comum não trivial classifica imediatamente o candidato como composto. Cada entrada tem limite de 1,000 dígitos decimais, impondo uma fronteira computacional clara. Sinais, espaços, pontos decimais, notação exponencial e zeros à esquerda são rejeitados para evitar interpretações ambíguas.
Ao escolher bases manualmente, use várias bases distintas para obter evidência mais forte. A capacidade não sorteia uma base, o que mantém todas as execuções reproduzíveis e permite registrar exatamente qual testemunha foi verificada.
Como interpretar o resultado com responsabilidade
O campo passes informa se a congruência exata de Solovay-Strassen vale para o par fornecido. Quando ele é false, classification é composite e a base informada certifica que o candidato não pode ser primo. Repita o teste com bases selecionadas de maneira independente se Solovay-Strassen for exigido por um exercício ou protocolo, considerando cada rodada aprovada como evidência probabilística adicional, não como prova.
Em sistemas novos sensíveis à segurança, use um procedimento moderno de teste de primalidade, cuidadosamente especificado, com número adequado de rodadas e aleatoriedade revisada, em vez de confiar em uma única base manual.
Casos de uso
Verificar uma testemunha de livro
Reproduza um exercício de Solovay-Strassen com o candidato e a base exatos apresentados no enunciado.
Examinar o comportamento de pseudoprimos
Compare como um candidato composto passa com uma base e falha com outra, mantendo todos os valores intermediários.
Criar uma triagem reproduzível
Registre resultados determinísticos de uma base antes de aplicar bases adicionais ou um teste de primalidade mais forte.
Perguntas frequentes
Um resultado aprovado prova que n é primo?
Não. Ele significa apenas que n é provavelmente primo para a base fornecida; outra base pode provar que é composto.
Por que n deve ser ímpar e ter valor mínimo de 3?
A comparação pelo símbolo de Jacobi usada neste teste é definida aqui para candidatos ímpares a partir de 3.
O que acontece quando a e n têm um fator comum?
O gcd retornado expõe o fator comum, e o teste classifica n como composto sem considerar aprovada a comparação de Jacobi.
A capacidade escolhe uma base aleatória?
Não. Você fornece a base, tornando o cálculo determinístico e reproduzível.
Qual o tamanho máximo dos números no teste de Solovay-Strassen?
Cada número pode ter até 1.000 algarismos decimais. Eles são tratados exatamente como você os digita, sem arredondamento, então um candidato enorme recebe a mesma comparação exata que um pequeno.
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/solovay-strassen-test \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":"561","a":"2"}'const res = await fetch("https://api.kit.forhosting.com/numth/solovay-strassen-test", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": "561",
"a": "2"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/solovay-strassen-test",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": "561",
"a": "2"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/solovay-strassen-test", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":"561","a":"2"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":"561","a":"2"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/solovay-strassen-test", 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
{
"n": "561",
"a": "2"
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.solovay_strassen_test",
"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.
Limites
max_digits | 1000 |
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 significado da comparação
Uma coincidência é mais fraca: indica somente que n passou para a base escolhida, por isso a classificação cuidadosa é probable_prime_to_base.
Como escolher e validar as entradas
O uso de strings é importante porque números JSON comuns não representam com exatidão todos os inteiros grandes.
Como interpretar o resultado com responsabilidade
Quando é true, classification é probable_prime_to_base, e não prime. Os campos detalhados esclarecem o resultado: gcd mostra um fator compartilhado imediato, jacobi_symbol é -1, 0 ou 1, euler_residue é a potência modular calculada e expected_residue é o valor de Jacobi normalizado no intervalo módulo n. As solicitações via API usam o preço-base publicado US$ 0,002; o mesmo cálculo determinístico também atende ao uso interativo no navegador.
Perguntas técnicas
Por que n e a são strings em vez de números JSON?
Strings decimais preservam exatamente inteiros além do intervalo numérico seguro do JavaScript e evitam arredondamentos silenciosos.
Quanto custa uma solicitação via API?
A tarifa básica é US$ 0,002 por solicitação. Uma solicitação avalia um par de candidato e base.