C++ erreur d'exécution

Bonjour,

#include "stdafx.h"
#include "stdafx.h"
#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 diffZrents de zZro
*/
if(_a != 0 && _b != 0) {
while(!_fin) {
/* On applique la division euclidienne */
_reste = _dividende % _diviseur;
_quotient = (_dividende - _reste) / _diviseur;

/* Si le _reste est diffZrent de 0, on continue l'algorithme */
if(_reste != 0) {
_dividende = _diviseur;
_diviseur = _reste;
}
else {
_fin = 1;
}
}
}
else {
/* Erreur ... */
_diviseur = 0;
}

return _diviseur;
}

3 réponses

  • Votes
  • Date
  • Date décroissante
  1. voilà les ereeurs
    cuments\visual studio 2008\projects\analyse\analyse\analyse.cpp(73) : warning C4244: 'argument' : conversion de 'time_t' en 'unsigned int', perte possible de données
    1>c:\documents and settings\emna\mes documents\visual studio 2008\projects\analyse\analyse\analyse.cpp(108) : error C2668: 'sqrt' : appel ambigu à une fonction surchargée
    1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(581): peut être 'long double sqrt(long double)'
    1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(533): ou 'float sqrt(float)'
    1> c:\program files\microsoft visual studio 9.0\vc\include\math.h(128): ou 'double sqrt(double)'
    1> lors de la tentative de mise en correspondance de la liste des arguments '(int)'
    1>Le journal de génération a été enregistré à l'emplacement "file://c:\Documents and Settings\emna\Mes documents\Visual Studio 2008\Projects\analyse\analyse\Debug\BuildLog.htm"
    1>analyse - 1 erreur(s), 1 avertissement(s)
    ========== Génération : 0 a réussi, 1 a échoué, 0 mis à jour, 0 a été ignoré ==========
    1. expliquez moi svp
      1. Contributeur
        je ferai des efforts pour expliquer lorsque tu fera des efforts pour poser des questions et expliquer le problème. Fait ce que je dit tu lèveras l'indétermination.