Contagem de composições inteiras
O número 5 tem 16 somas ordenadas diferentes, porque as composições de n são sempre 2^(n-1). Digite um n de até 10000 e receba a contagem exata, mesmo com milhares de dígitos. 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
- 5
- Quantidade
- 16
Uma composição ordenada de um inteiro positivo n é uma tupla de inteiros positivos que somam n, em que a ordem das partes faz parte da identidade: 1+3 e 3+1 são duas composições distintas de quatro. A combinatória clássica prova que o número dessas somas ordenadas é sempre dois elevado a n menos um. Esta capacidade aceita um único inteiro positivo n e devolve essa contagem exata, junto com a fórmula fechada 2^(n-1), para que você não precise enumerar cada tupla, percorrer uma árvore binária de separadores nem arriscar um erro de um ao conferir lições, casos de competição ou identidades de funções geradoras.
Por que o número de composições ordenadas é dois elevado a n menos um
Escreva n uns em uma fileira. Entre esses uns existem exatamente n menos um vãos. Em cada vão você pode inserir uma barra que parte a sequência em uma nova parte, ou deixar o vão vazio para que os uns adjacentes fiquem colados como uma parte maior.
Cada padrão de barras e vãos vazios produz uma composição ordenada de n, e toda composição nasce de exatamente um padrão desses. Como cada um dos n menos um vãos tem duas escolhas independentes, o número total de padrões é dois elevado a n menos um. Essa identidade é todo o algoritmo que esta capacidade avalia: ela não percorre ramos de primeira parte, não aloca um array de tuplas e não amostra.
Uma checagem de uma linha para n igual a quatro dá oito, coincidindo com as oito composições (4), (1,3), (3,1), (2,2), (1,1,2), (1,2,1), (2,1,1) e (1,1,1,1). Para n igual a um há um único padrão sem barras e a contagem é um, a própria composição (1). A forma fechada é exata para todo inteiro positivo, de modo que um trabalho que afirme nove composições de quatro está simplesmente errado, e um gerador que precise do tamanho da família de composições pode dimensionar buffers com esta contagem sem nunca listá-las.
A ordem é essencial: se você identifica 1+3 com 3+1, saiu das composições e entrou no mundo das partições, cuja contagem p(n) não tem essa fórmula de potência de dois e é uma intenção de busca diferente.
O que você envia, o que recebe de volta e quando a requisição falha
A regra de produto é rígida: n abaixo de um é inválido, inclusive zero e todo negativo, porque a definição usual de composição exige um inteiro positivo a compor. Em caso de sucesso, a resposta ecoa o n normalizado, devolve count como string decimal do valor exato 2^(n-1) e inclui formula como a string de identidade 2^(n-1) para que os clientes mostrem o teorema sem codificá-lo à mão.
A contagem é uma string de propósito: dois elevado a cinquenta e três já deixa o intervalo de inteiros seguros do JavaScript, e esta página é útil justamente quando n é grande o bastante para que listar cada composição seja inviável. Validação falha não é cobrada.
Onde uma contagem de composições se encaixa e como é cobrada
Use esta contagem quando a pergunta for quantas somas ordenadas existem, não quais são as tuplas. Programadores de competição confrontam soluções candidatas de problemas de contagem de composições com um oráculo determinístico em vez de reimplementar uma potência BigInt em cada harness de linguagem. Professores passam a prova dos vãos e barras e precisam de uma checagem automática de que 2^(n-1) é de fato o tamanho da família antes de os alunos tentarem listá-la.
Sandboxes de entrevista e demos de funções geradoras precisam do mesmo número sempre que perguntam. Trabalho de dados e de compiladores às vezes dimensiona um espaço de busca de divisões por etapas ordenadas de um orçamento n e precisa conhecer a cardinalidade antes de alocar.
Se você realmente precisa de cada tupla, pare aqui e use uma ferramenta de listagem com um n pequeno; se precisa de composições em exatamente k partes, isso é o binomial C(n-1, k-1) e outra página; se a ordem não importa, você quer a função de partição p(n). Mantenha n dentro dos limites documentados, trate a string count como o inteiro exato e você obtém uma contagem de composições reproduzível sem instalar um sistema de álgebra computacional.
Casos de uso
Checagem escolar da identidade 2^(n-1)
Dê aos alunos um n positivo e verifique que as composições contadas à mão batem com a forma fechada antes de listar cada tupla.
Validadores de competição e entrevista
Confrontar soluções candidatas de problemas de contagem de composições com uma contagem BigInt exata em vez de reimplementar uma potência de dois em cada harness.
Dimensionar o espaço de divisões ordenadas
Saiba quantas divisões por etapas ordenadas de um orçamento n existem antes de alocar buffers ou lançar um enumerador.
Perguntas frequentes
O que a contagem de composições inteiras devolve?
Para um inteiro positivo n, devolve o número exato de composições ordenadas de n como string decimal, mais a fórmula 2^(n-1). Não lista as tuplas.
Por que a fórmula é dois elevado a n menos um e não 2^n?
Há n uns em fila e apenas n−1 vãos entre eles. Cada vão é uma escolha binária (barra ou sem barra), então a contagem é 2^(n−1), não 2^n.
Esta página enumera cada composição?
Não. Esta página responde quantas composições existem. Listar cada tupla ordenada é outra tarefa e só é prático para n pequeno.
Como a contagem de composições é cobrada?
A ferramenta do navegador é gratuita e roda localmente.
Quantas composições o número 5 tem?
São 16. Entre cinco uns existem 4 espaços, e em cada um você coloca um corte ou não: são 2 escolhas por espaço, logo 2^4 = 16 somas ordenadas.
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/compositions-count \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":5}'const res = await fetch("https://api.kit.forhosting.com/numth/compositions-count", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/compositions-count",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/compositions-count", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/compositions-count", 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": 5
}Exemplo de resposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.compositions_count",
"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
min_n | 1 |
max_n | 10000 |
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
A mesma função pura roda na ferramenta gratuita do navegador e no caminho de API. Valores de n abaixo de um são rejeitados com invalid_input e nunca são cobrados.
O que você envia, o que recebe de volta e quando a requisição falha
Envie por POST um corpo JSON com o inteiro positivo obrigatório n, o inteiro cujas composições ordenadas você quer contar. Os aliases integer, value e N são aceitos para o mesmo campo. n deve ser um número inteiro de um a dez mil; strings numéricas de dígitos são aceitas, enquanto frações, booleanos, strings vazias e campos ausentes falham com invalid_input nomeando n. Valores acima do máximo publicado também falham para que uma potência de dois com milhares de dígitos não trave o Worker nem o navegador. Checagens típicas que você pode fixar em testes: n igual a um produz count 1; n igual a cinco produz count 16; n igual a dez produz count 512; n igual a zero é invalid_input.
Onde uma contagem de composições se encaixa e como é cobrada
O uso da API consome saldo pré-pago KIT ao preço-base publicado US$ 0,002 por item bem-sucedido; invalid_input não consome saldo.
Perguntas técnicas
Quais valores de n são aceitos?
Inteiros de 1 a 10000. Zero, negativos, frações, n ausente e valores acima do máximo falham com invalid_input e não são cobrados.