erreur d'execution - C++ - Programmation
Marsh Posté le 13-03-2012 à 08:20:57
fais voir ton code
Marsh Posté le 13-03-2012 à 11:13:46
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#include <math.h>
int myRandom();
int isPremier(int);
/**
main()
*/
int main(void) {
int _p, _q, _n, _indEuler;
int _e = 0;
int _d = 0;
int _flag = 0;
do {
_p = myRandom();
_q = myRandom();
} while((isPremier(_p) == 0) || (isPremier(_q) == 0) );
_n = _p * _q;
_indEuler = (_p - 1) * (_q - 1);
while( !_flag ) {
if( isPremier(_e) ) {
if( (_n % _e == 0) && (_e < _n) ) {
_e++;
} else {
// on a trouve l'exposant publique
// on sort du while
_flag = 1;
}
} else {
_e++;
}
}
_flag = 0;
// on cherche l'exposant prive
while( !_flag ) {
if( ( _e * _d - 1) % _n == 0 ) {
// on a trouve
_flag = 1;
} else
_d++;
}
printf("p = %d\n", _p);
printf("q = %d\n", _q);
printf("n = %d\n", _n);
//printf("Indice Euler = %d\n", _indEuler);
printf("e = %d\n", _e);
printf("d = %d\n", _d);
return (0);
}
/**
myRandom()
*/
int myRandom(void)
{
static int first = 0;
if (first == 0) {
srand (time (NULL));
first = 1;
}
return ( rand () % 10 );
}
/**
isPremier(int)
*/
int isPremier(int _entier) {
static int _premiers[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,
43,47,53,59,61,67,71,73,79,83,89,97};
int i, n;
double d;
/* 1 n'est pas premier */
if (_entier == 1)
{
return 0;
}
n = sizeof (_premiers) / sizeof (*_premiers);
/* D'abord on regarde si n est divisible par les nombres premiers dans le tableau */
for (i = 0; i < n; i++) {
if (_entier == _premiers[i]) {
return 1;
}
if (_entier % _premiers[i] == 0) {
return 0;
}
}
/* Ensuite, on doit regarder a partir du dernier element du tableau+2 jusqu'a sqrt(_entier)... */
d = sqrt (_entier) + 0.5; /* Le 0.5 permet de tester si c'est un carre parfait... */
i = _premiers[i-1] + 2;
while (i < d) {
if (_entier % i == 0) {
return 0;
}
i += 2;
}
return 1;
}
/**
*/
int pgcd(long _a, long _b)
{
long _dividende = labs(_a); /* le _dividende contient la valeur absolue de a */
long _diviseur = labs(_b); /* le _diviseur contient la valeur absolue de b */
long _quotient;
long _reste;
int _fin = 0;
/*
* on ne calcule le pgcd de deux nombres que s'ils sont diffŽrents de zŽro
*/
if(_a != 0 && _b != 0) {
while(!_fin) {
/* On applique la division euclidienne */
_reste = _dividende % _diviseur;
_quotient = (_dividende - _reste) / _diviseur;
/* Si le _reste est diffŽrent de 0, on continue l'algorithme */
if(_reste != 0) {
_dividende = _diviseur;
_diviseur = _reste;
}
else {
_fin = 1;
}
}
}
else {
/* Erreur ... */
_diviseur = 0;
}
return _diviseur;
}
Marsh Posté le 13-03-2012 à 11:53:34
Regarde au niveau de la configuration de ton ide, sous linux avec gcc, ça marche.
Code :
|
Marsh Posté le 13-03-2012 à 12:47:37
Bonjour,
tu compile surement avec Visual c++.
Je te suggère de refaire un projet vide en désactivant les entêtes précompilés et en rajoutant manuellement le fichier contenant ton code ci dessus.
Marsh Posté le 13-03-2012 à 16:39:25
ReplyMarsh Posté le 13-03-2012 à 19:40:46
Terminapor a écrit : C'est du C++ ça ? |
Ah non. J'ai utilisé g++ par habitude
Marsh Posté le 14-03-2012 à 00:31:44
Non mais je parlais du code posté
C'est du C là
Marsh Posté le 14-03-2012 à 18:37:48
Ils ont beau améliorer les messages d'erreur des compilateurs :
Hnayn5291 a écrit : |
Visiblement, ça ne suffit pas
Marsh Posté le 12-03-2012 à 21:19:53
Bonsoir,
j'ai en train d'executer le cryptage RSA sur c++ j'obtiens l'erreur suivante:
1>------ Début de la génération : Projet : code1, Configuration : Debug Win32 ------
1>Compilation en cours...
1>code1.cpp
1>.\code1.cpp(1) : warning C4627: '#include <stdlib.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
1>.\code1.cpp(2) : warning C4627: '#include <stdio.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
1>.\code1.cpp(3) : warning C4627: '#include <time.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
1>.\code1.cpp(4) : warning C4627: '#include <math.h>' : ignoré lors de la recherche d'une utilisation d'un en-tête précompilé
1> Ajoutez la directive à 'stdafx.h' ou régénérez l'en-tête précompilé
1>.\code1.cpp(155) : fatal error C1010: fin de fichier inattendue lors de la recherche d'un en-tête précompilé. N'auriez-vous pas oublié d'ajouter '#include "stdafx.h"' à votre source ?
1>Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\ines hammami\Mes documents\Visual Studio 2008\Projects\code1\code1\Debug\BuildLog.htm"
1>code1 - 1 erreur(s), 4 avertissement(s)
========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
je suis dans un projet:"aplication console win32"
pourquoi cette erreur et comment l'éviter pour que le code ça marche?
merci