View Full Version : matematica...credo ;)
qualcuno mi sa dire che cos'è quel mod???? le mie conoscenze sn ancora troppo scarse... :cry:
http://upload.wikimedia.org/math/0/3/f/03f3dfa06cd41c58526c6a02a06b57e4.png
il tutto sta qua...
http://it.wikipedia.org/wiki/RSA
ma senza capire il mod nn posso capire come funziona l'algoritmo :mc:
grazie mille ciao
http://it.wikipedia.org/wiki/Aritmetica_modulare
ma se ho 123^17 (mod 3233) come faccio a calcolare che è 855??? :cry:
qualcuno mi sa dire che cos'è quel mod????Fornisce il resto della divisione (come l'operatore % di C, C++, ecc...).
Volendo provarlo in Java:
BigInteger bi = BigInteger.valueOf (123L);
BigInteger div = BigInteger.valueOf (3233L);
bi = bi.pow (17);
BigInteger mod_result = bi.mod (div); // Risultato di 123^17 mod 3233
System.out.println (mod_result);
Stampa 855
Si l'esempio più ricorrente sull'uso del mod è controllare che il resto di una divisione per due sia uguale a zero, per trovare i numeri pari.
Ad esempio in visual basic si usa così:
If Numero1 Mod 2 = 0 Then
MsgBox "numero pari!"
Else
MsgBox "numero dispari!"
End If
mhh... ora inizio a capire un po meglio... e in c++ come si fa invece????
cmq se ho capito bene quell'855 non è altro che il resto di 123^17/3233... giusto?
e in c++ come si fa invece????Ehm ... ci sarebbe solo un problemino. 123^17 è un bel numerone, nessun tipo di dato in C/C++ è in grado di contenerlo! Dovresti usare una libreria apposita per gestire i numeri a "precisione arbitraria" (un po' come il BigInteger di Java nel mio esempio).
cmq se ho capito bene quell'855 non è altro che il resto di 123^17/3233... giusto?Esatto.
Dovresti usare una libreria apposita per gestire i numeri a "precisione arbitraria" (un po' come il BigInteger di Java nel mio esempio).
E ti pareva?? Risolvo il problema di cosa vuol dire mod e ne nasce un'altro... :p
tu mi sai consigliare una di queste librerie?? Io non so dove mettere le mani... :mc:
repne scasb
04-10-2006, 17:51
Ehm ... ci sarebbe solo un problemino. 123^17 è un bel numerone, nessun tipo di dato in C/C++ è in grado di contenerlo! Dovresti usare una libreria apposita per gestire i numeri a "precisione arbitraria" (un po' come il BigInteger di Java nel mio esempio).
Esatto.
Se il dividendo e' una potenza, il calcolo del resto si presta ad una "notevole" semplificazione senza l'uso di numeri "grandi":
#include <stdio.h>
void main(void)
{
unsigned long base,esponente,divisore,resto,i;
printf("Base: ");
scanf("%8ld",&base);
printf("Esponente: ");
scanf("%8ld",&esponente);
printf("Divisore: ");
scanf("%8ld",&divisore);
for(resto=base,i=0;i<(esponente-1);i++)
resto=(resto*base)%divisore;
printf("Resto: %ld\n",resto);
}
Per esempio: (21219^37339)/15119 da come resto 6100
funziona alla perfezione... grazie!!!
cmq se per altre volte mi venisse bisogno di usare numeri enormi... che librerie potrò usare??
cmq se per altre volte mi venisse bisogno di usare numeri enormi... che librerie potrò usare??Ad esempio la GMP (http://www.swox.com/gmp/).
emmhh... ultima cosa :D
se ho: x = 1 (mod n)
significa che il resto di x/n è 1???
emmhh... ultima cosa :D
se ho: x = 1 (mod n)
significa che il resto di x/n è 1???Guarda ... sarà che non sono un matematico ma quella immagine che hai linkato all'inizio non mi sembra molto chiara come sintassi descritta. Non capisco cioè la necessità di quelle parentesi ... :stordita:
Normalmente si usa scrivere:
x = a mod b o per dirla secondo i linguaggi C/C++, ecc... x = a % b
dove x è il resto della divisione a/b.
DanieleC88
09-10-2006, 12:57
emmhh... ultima cosa :D
se ho: x = 1 (mod n)
significa che il resto di x/n è 1???
No, x = resto di (1 / n), almeno dovrebbe essere così.
icecube_HU
09-10-2006, 14:56
emmhh... ultima cosa :D
se ho: x = 1 (mod n)
significa che il resto di x/n è 1???
L'espressione non e' indicata correttamente, perche' cosi' e' abbastanza assurda: 1 mod n vale sempre 1, per ogni n !!!!
significa che il resto di x/n è 1???
Questo sarebbe: x mod n = 1 (in senso aritmetico, non in un linguaggio di programmazione).
Ciao !
L'espressione non e' indicata correttamente, perche' cosi' e' abbastanza assurda: 1 mod n vale sempre 1, per ogni n !!!!
ho messo il link alla pagina internet da cui ho preso le operazioni per l'RSA... ci puoi tirare un occhio?? li scrivono che è prorpio così!
icecube_HU
10-10-2006, 20:46
ho messo il link alla pagina internet da cui ho preso le operazioni per l'RSA... ci puoi tirare un occhio?? li scrivono che è prorpio così!
Ok, c'ho "tirato un occhio" ! :D
Permettimi una domanda: non conosci l'operatore Mod e ti interessi dei dettagli matematici dell'algoritmo RSA ??? :eek:
Comunque ho capito dov'e' l'inghippo... (per la verita' ce l'aveva suggerito 0rph3n nella prima risposta al tuo thread !)
L'espressione NON e': x = 1 (mod n) in quanto al posto dell'uguale (=) ci sono TRE trattini sovrapposti: e' l'operatore "congruenza in modulo" !
Il significato, con un esempio numerico, e' ad esempio:
11 <congruo> 6 (mod 5)
e vuol dire che 11 e 6 sono numeri "congrui tra loro in modulo 5", in quanto hanno lo stesso resto (1) dividendoli per 5.
Quindi: X <congruo> 1 (Mod N) significa che X e 1 hanno lo stesso resto in modulo N, e quindi X/N ha resto 1 (c.d.d. :read: :D ) :muro: :muro:
Auguri per lo studio !!!!! :mc:
...mhh... capito!! grazie!! :D
e vuol dire che 11 e 6 sono numeri "congrui tra loro in modulo 5", in quanto hanno lo stesso resto (1) dividendoli per 5.
Quindi: X <congruo> 1 (Mod N) significa che X e 1 hanno lo stesso resto in modulo N, e quindi X/N ha resto 1 (c.d.d. :read: :D ) :muro: :muro:
che equivale anche a dire che il resto della sottrazione tra i due numeri deve essere un multiplo di N...
...o anche che babbo natale non esiste :sofico:
Auguri per lo studio !!!!! :mc:
aggiungo pure i miei :D
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.