Rechercher : dans
Par :

Calcul d'un modulo d'un tres grand nombre

Dernière réponse le 23 jui 2009 à 02:25:29 Trigor, le 4 déc 2008 à 20:27:27 
 Signaler ce message aux modérateurs

Bonjour,
J'ai fais une fonction qui permet de calculer un nombre avec un très grand exposant sur un grand modulo. Pour un système de cryptographie.

Voici ma fonction :

unsigned long long int puisd(int x, int y, int z)
{
unsigned long long int res=1;
while (y>0) {
if ((y%2)==1) {
res=(res*x)%z;
y--;
}
else {
x=(x*x)%z;
y=(y/2);
}
}
return res;
}

Donc x = le nombre en question, y = l'exposant, et z = le modulo.

Alors pour 17266^28549 modulo 94631, soit puisd(17266,28549,94631), il m'affiche : 27938.

Mais je sais pas comment prouver que mon résultat est correct : \.
Donc ce serait pour demander si mon code est t-il bon ?

Merci d'avance, cya

Configuration: Windows Vista
Safari 525.19

Meilleures réponses pour « Calcul d'un modulo d'un tres grand nombre » dans :
Exercice assembleur x86 nombre premier VoirIntroduction Notions abordées dans cet exercice Enoncé Rappel Corrigé Explication Introduction Ce petit exercice d'assembleur vise les architectures x86 (Processeurs Intel et Amd 32 bits) et utilise la syntaxe de Nasm, un assembleur...
Télécharger Gnumeric VoirLes applications de traitement de textes existent en grand nombre sur le Web que l'on peut télécharger. Mais celles destinées à la gestion et création de feuilles de calcul sont rares. Gnumeric est une application open source utilisée pour le...
Télécharger Ghostscript VoirGhostscript est le nom d'un ensemble d'outils fournissant : Un interpréteur pour le langage PostScript (TM), offrant la possibilité de convertir des fichiers PostScript (fichiers PS) vers un grand nombre de formats bitmap, de les afficher ou...
PHP - Bases de données VoirPhp permet un interfaçage très simple avec un grand nombre de bases de données. Lorsqu'une base de données n'est pas directement supportée par Php, il est possible d'utiliser un driver ODBC, pilote standard pour communiquer avec les bases de...
Cryptographie - Secure Shell (protocole SSH) VoirInternet permet de réaliser un grand nombre d'opérations à distance, notamment l'administration de serveurs ou bien le transfert de fichiers. Le protocole Telnet et les r-commandes BSD (rsh, rlogin et rexec) permettant d'effectuer ces tâches...
VBScript - Les fonctions de manipulation de tableaux VoirLes fonctions de manipulation de tableaux Fonction Description Array(arglist) Crée un Variant contenant un tableau. L'argument arglist est la liste des valeurs, séparées par des...

1

fiddy, le 4 déc 2008 à 21:35:39

Salut,
Le résultat est incorrect. Le résultat est 93399.
Le C n'est pas très bon en natif pour les calculs. Pour le genre d'opérations que tu veux faire, à toi d'implémenter les algorithmes pour calculer les puissances modulaires. Il y en a de performants. D'ailleurs, il doit sûrement exister des bibliothèques prêtes à l'emploi.
Cdlt
Google is your friend

Répondre à fiddy

2

Trigor, le 5 déc 2008 à 19:27:50

Le probleme c'est que je dois utilisé la méthode "des carrées et multiplication",

J'ai reesayer avec une fonction recurssive :

int puisd(int x, int y, int z)
{
if (y==0) return 1;
if (y%2==0) return (puisd(x, y/2, z) * puisd(x, y/2, z))%z;
if (y%2==1) return (x * puisd(x, y-1, z))%z;
else return 0;
}

Fonctionne avec de petit nombre, mais sans succes avec les gros nombres : (
Je trouve 61934 avec cette fonction...

Répondre à Trigor

3

 crypto, le 23 jui 2009 à 02:25:29

BONJOUR
cé un probleme résolu par des algorithmes dits de l'exponentiation modulaire je te conseille de chercher sur internet sur ce terme. une nuite de multiplications et de carrés pour trouver le résultat final.
mais en pratique ce sont des grands nombres par exemple au minimum 1024 bits pour le RSA et tu dois pouvoir multiplier 2 nombres je te conseille de voir des algorithmes comme MONTGOMERY cé pratique. et tu peux utliser GMP cé pratique aussi.
bon courage

Répondre à crypto