Probleme de type

Résolu/Fermé
raygouda - 3 mai 2011 à 00:24
 raygouda - 3 mai 2011 à 01:59
Bonjour mes chers amis.

"010 052 215 211 901 091 305"
Un bloc B est chiffré par la formule C =(pow(B,e))mod n. en fait quand je met pow c'est pour juste dire B exposant e.
Dans mon cas e=7 et n=5141.En appliquant la formule on trouve:"0755 1324 2823 3550 3763 2237 2052".

1er cas avec un double:
int i;
double e,n;
double Cod[]={010, 052, 215, 211, 901, 091, 305};
e=7;
n=5141;
for(i=0;i<Cod.lenght;i++)
{
Cod[i]=(Math.pow(Cod[i],e)%n);
}
for(i=0;i<Cod.lenght;i++)
{
System.out.print("valeur"+i+": "+Cod[i]+" ");
}

Résultat1:valeur0: 755 valeur1: 1324 valeur2: 2824 valeur3: 3551 valeur4: 563 valeur5: 2237 valeur6: 2035
Dans ce cas les valeurs 2,3,4 et 6 sont fausses.



2eme cas un long

création d'une fonction puissance:

long puissance(long p1,long q1)
{
long puiss;
if(q1==1)
{
puiss=p1;
}
else{
puiss=p1*puissance(p1,(q1-1));
}
return puiss;
}

///////////////////////////////////////////
int i;
long e,n;
long Cod[]={010, 052, 215, 211, 901, 091, 305};
e=7;
n=5141;
for(i=0;i<Cod.lenght;i++)
{
Cod[i]=((puissance(Cod[i],e))%n);
}
for(i=0;i<Cod.lenght;i++)
{
System.out.print("valeur"+i+": "+Cod[i]+" ");
}

Résultat2:valeur0: 755 valeur1: 1324 valeur2: 2823 valeur3: 3550 valeur4: 140 valeur5: 2237 valeur6: 2052

Dans ce cas seule la valeur 4 est fausse.je pense que cela est du a la valeur de 901 exposant 7 qui est > à 9223372036854775807(la limite des types long).

SVP si quelqu'un pourrait me donner un moyen pour résoudre ce problème cela m'aidera énormément.

Merci d'avance.

1 réponse

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
3 mai 2011 à 00:47
Regarde les BigInteger, c'est l'idéal pour ce genre de calculs.
0
Merci KX.j'ai pu résoudre mon problème.c'est ce qui me fallait.
0