Esponenziazione modulare veloce
Ottenga il resto esatto di una potenza enorme senza traboccamenti: 2 elevato alla 10 modulo 1000 fa 24, e 3 elevato alla 5 modulo 13 fa 9. Base, esponente e modulo possono avere fino a 2048 cifre ciascuno. Gratis nel suo browser.
- Gratis
- Funziona nel suo browser
- Senza registrazione
- I suoi dati restano sul dispositivo
Esegui gratis nel browser
Esempio risolto
- Base
- 2
- Esponente
- 10
- Modulo
- 1000
- Risultato
- 24
L'esponenziazione modulare veloce risponde a una domanda precisa: qual è il resto non negativo esatto quando una base intera viene elevata a un esponente intero e ridotta modulo m? Quel residuo sostiene demo didattiche in stile RSA, bozze di scambio Diffie–Hellman, problemi di gare di programmazione e qualsiasi script di produzione che debba potenziare interi grandi senza far traboccare tipi a larghezza fissa né perdere precisione oltre 2^53.
Cosa calcola l'esponenziazione modulare veloce
Dati interi base, exponent e modulo m, l'esponenziazione modulare restituisce l'unico resto r nell'intervallo chiuso da zero a m meno uno tale che la base elevata all'esponente sia congruente a r modulo m. In simboli, r ≡ base^exponent (mod m). Un approccio ingenui moltiplica la base per se stessa exponent volte e solo poi riduce, gonfiando i valori intermedi ben oltre la virgola mobile o gli interi a larghezza fissa e fallendo in silenzio quando si perde precisione.
L'esponenziazione modulare veloce riduce dopo ogni moltiplicazione e eleva al quadrato la base corrente scorrendo i bit dell'esponente dal meno al più significativo, così il lavoro totale scala con la lunghezza in bit dell'esponente e non con la sua magnitudine decimale. Quando m vale uno, ogni intero è congruente a zero, quindi il risultato è sempre zero. Quando l'esponente è zero, il risultato è uno per qualsiasi base purché m sia maggiore di uno, secondo la convenzione del prodotto vuoto della teoria dei numeri e delle librerie di programmazione.
Le basi negative vengono prima ridotte nel sistema di residui non negativi modulo m affinché la catena di moltiplicazioni non mescoli resti con segno. Gli esponenti negativi sono rifiutati perché richiedono inversi modulari che possono non esistere quando base e m non sono coprimi, e quel passo di inverso è fuori dall'ambito di questo calcolatore.
Limiti, prestazioni e dove lo usano gli sviluppatori
L'esponenziazione modulare binaria esegue un numero costante di moltiplicazioni modulari per bit dell'esponente, quindi raddoppiare l'esponente raddoppia all'incirca il lavoro, mentre un modulo più grande rincara ogni prodotto con la lunghezza in cifre. I docenti lo usano per verificare a mano a^b mod m prima che gli studenti consegnino le dimostrazioni.
Gli sviluppatori lo collegano a test di proprietà che affermano che i protocolli restano nelle classi di residui, a giochi o classifiche che ripiegano contatori grandi modulo un primo, e a pipeline di scripting che non devono reimplementare quadrato e moltiplicazione in ogni linguaggio.
Casi d'uso
Verificare risposte di gara e compiti a^b mod m
Studenti e tutor possono controllare potenze modulari senza moltiplicare a mano intermediari enormi né fidarsi di una calcolatrice che perde precisione in silenzio oltre 2^53.
Avviare demo crypto e test unitari di protocollo
Script che necessitano di un passo deterministico base^exp mod m per RSA giocattolo, Diffie–Hellman o asserzioni di classe di residui possono chiamare questo invece di portare la propria potenza BigInt.
Ripiegare contatori grandi in un intervallo di residui fisso
Giochi, sistemi di ranking e aiuti di sharding che elevano un intero e poi riducono modulo m ottengono un resto esatto senza sorprese di arrotondamento in virgola mobile.
Domande frequenti
Che cos'è l'esponenziazione modulare?
Consiste nell'elevare la base a un esponente e prendere il resto modulo m, scritto base^exponent mod m. Questo calcolatore restituisce quel resto non negativo come result.
Perché un esponente negativo viene rifiutato?
Gli esponenti negativi significano potenze reciproche e richiedono inversi modulari, che possono non esistere quando base e m non sono coprimi.
Come funziona il calcolatore di esponenziazione modulare veloce?
Usa quadrato e moltiplicazione binari su BigInt: per ogni bit dell'esponente eleva al quadrato la base corrente modulo m e moltiplica nel risultato quando il bit è attivo.
Il calcolatore di esponenziazione modulare veloce è gratis?
Lo strumento nel browser è gratis e gira in locale.
Cosa succede se il modulo è 1 o l'esponente è 0?
Con modulo 1 ogni numero lascia resto 0, quindi il risultato è sempre 0. Con esponente 0 il risultato è 1 per qualsiasi base, purché il modulo sia maggiore di 1: 7 elevato alla 0 modulo 5 dà 1.
Strumenti correlati
Per sviluppatori — accesso via API
Tutto quello che vedi in questa pagina è disponibile anche via API. Questa sezione è per i team che vogliono integrarlo nei propri sistemi; chi non ne ha bisogno può semplicemente usare lo strumento qui sopra.
Endpoint
Autenticazione con Bearer token: un POST mette in coda l'attività e il risultato arriva via webhook o link firmato.
Chiamala dal tuo stack
curl -X POST https://api.kit.forhosting.com/dev/modular-exponentiation \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"base":"2","exponent":"10","modulus":"1000"}'const res = await fetch("https://api.kit.forhosting.com/dev/modular-exponentiation", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"base": "2",
"exponent": "10",
"modulus": "1000"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/modular-exponentiation",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"base": "2",
"exponent": "10",
"modulus": "1000"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/modular-exponentiation", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"base":"2","exponent":"10","modulus":"1000"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"base":"2","exponent":"10","modulus":"1000"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/modular-exponentiation", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Esempio di richiesta
{
"base": "2",
"exponent": "10",
"modulus": "1000"
}Esempio di risposta
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.modular_exponentiation",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}L'API è asincrona: ricevi subito un task_id e puoi fare polling fino a 1 richiesta al secondo.
Prezzi
Prezzo pubblicato, senza token né crediti. Se l'attività fallisce, non paghi.
Errori
| HTTP | Codice | Significato |
|---|---|---|
401 | unauthorized | Chiave API mancante o non valida: controlla l'header Authorization. |
402 | insufficient_balance | Credito esaurito: ricarica per continuare a eseguire attività. |
404 | unknown_type | Tipo di attività sconosciuto: controlla il campo type della richiesta. |
429 | rate_limited | Troppe richieste in poco tempo: rallenta e riprova tra qualche secondo. |
Note tecniche
Questo calcolatore di esponenziazione modulare veloce esegue l'algoritmo binario di quadrato e moltiplicazione su BigInt così che i prodotti intermedi restino ridotti a ogni passo, la risposta sia deterministica, e Lei possa provare lo stesso nucleo puro gratis nel browser prima di chiamare l'API, che addebita solo le attività riuscite.
Cosa calcola l'esponenziazione modulare veloce
Il modulo deve essere almeno uno; moduli nulli o negativi non definiscono un resto non negativo standard e restituiscono invalid_input invece di inventare una risposta.
Come chiamare l'API e leggere il risultato
Invii un corpo JSON con tre campi obbligatori: base, exponent e modulus. Ciascuno può essere una stringa di intero decimale o un numero JSON; la forma stringa è preferita per valori oltre l'intervallo degli interi sicuri di JavaScript, perché sopra quella soglia non ogni intero è rappresentato esattamente. Sono accettati gli alias a per base, exp o e o power per exponent, e m o mod per modulus, così form e client scritti a mano condividono un solo contratto senza rinominare le chiavi. In caso di successo, la risposta riporta base, exponent e modulus come stringhe decimali normalizzate e aggiunge result come resto non negativo di base^exponent mod modulus. Controlli classici che Lei può eseguire subito: base 2, exponent 10, modulus 1000 dà result 24; base 3, exponent 5, modulus 13 dà 9; base 7, exponent 0, modulus 5 dà 1. Una validazione fallita—campi mancanti, non interi, frazioni, modulo inferiore a uno, esponente negativo o valore più lungo del limite di cifre pubblicato—restituisce invalid_input e non viene mai addebitata sul saldo prepagato. Il prezzo è un fisso $0.002 per richiesta riuscita sotto l'unità item.
Limiti, prestazioni e dove lo usano gli sviluppatori
Questa capacità limita base, exponent e modulus a 2048 cifre decimali—abbastanza per gare, compiti e molte demo a scala crittografica—e al tempo stesso abbastanza compatta da mantenere interattivo il BigInt puro del Worker senza uno stack multiprecisione pesante né un container. Se Le servono moduli da milioni di cifre, scomposizioni con il teorema cinese del resto o primitive crittografiche a tempo costante resistenti ai canali laterali, serve una libreria crittografica dedicata; questo strumento parse leggero è volutamente il calcolatore e il passo API condivisi per potenze modulari esatte nei flussi di sviluppo. Lo abbini a strumenti di fattorizzazione o inverso modulare quando il flusso richiede il kit modulare completo; questo endpoint risponde solo alla domanda di potenziare e ridurre affinché l'intento di ricerca resti chiaro e la risposta minima e prevedibile.
Domande tecniche
Cosa succede se il modulo è minore di 1?
Il modulo deve essere almeno 1. Moduli nulli o negativi non definiscono il resto non negativo standard usato qui e restituiscono invalid_input.