Inscription / Connexion Nouveau Sujet
Niveau algorithmique
Partager :

Algo somme nombres premiers

Posté par
barcelonais59
24-10-15 à 14:54

Bonjour, j'essaye actuellement d'écrire un algo en iJava m'affichant la somme des nombres premiers compris entre 1 et une valeur d'entrée exclue. J'ai écrit un code qui semble fonctionner pour les petites valeurs, cependant à un moment la fonction devient décroisssante jusqu'à me donner des nombres négatifs ( par exemple si j'entre 1million elle m'affiche -1104303641 ) ce qui m'est totalement incompréhensible. Voici le code de mon algo :
class sommeNombresPremiers extends Program {
    void algorithm() {
        print("Veuillez choisir la limite pour la somme des nombres premiers que vous souhaitez obtenir : ");
        int limite = readInt();
        int res = 0;
        for (int i = 2; i < limite; i++) {
            boolean premier = true;
            for (int j = 2; j <= sqrt(i) && premier; j++){
                if ( i%j == 0 ) {
                    premier = false;
                }
            }
            if ( premier ) {
                res = res + i;
            }
        }
        println(res);
    }
}


Voila merci de votre aide !

        

Posté par
carpediem
re : Algo somme nombres premiers 24-10-15 à 16:20

salut

je ne connais pas trop ce langage ... mais ::

Citation :
  for (int j = 2; j <= sqrt(i) && premier; j++){
                if ( i%j == 0 ) {


que signifie && (dans la première ligne ?)
que signifie i%j (dans la deuxième ligne ?)

Posté par
barcelonais59
re : Algo somme nombres premiers 24-10-15 à 16:46

Salut carpediem && correspond à l'opérateur booléen AND; i%j correspond au reste de la division euclidienne de i par j.

Posté par
carpediem
re : Algo somme nombres premiers 24-10-15 à 17:34

merci ....

je ne comprends pas pourquoi ça ne marche pas ... et même pourquoi ton résultat est négatif ...



désolé ...

PS: je suis curieux d'avoir la réponse si tu trouves ... merci par avance ...

Posté par
alb12
re : Algo somme nombres premiers 24-10-15 à 17:54

salut,
qu'obtiens-tu pour limite=100000 ?

Posté par
barcelonais59
re : Algo somme nombres premiers 24-10-15 à 21:40

salut alb12, pour 100000 j'obtiens 454396537

Posté par
alb12
re : Algo somme nombres premiers 24-10-15 à 22:19

en combien de temps ?
tu devrais peut-etre essayer d'ecrire deux fonctions:
la premiere qui teste si un entier est premier
la seconde qui fait la somme en appelant la premiere
Ce serait peut-etre plus simple de deceler le pb ?

Posté par
barcelonais59
re : Algo somme nombres premiers 24-10-15 à 23:23

Il me le fait presque instantanément. J'ai suivi ton conseil en créant une fonction testant la primalité que je place dans la boucle for mais j'obtiens exactement les mêmes résultats. Ca me parait très bizarre que je reçoive des nombres négatifs, alors que ce n'est mathématiquement pas possible je commence à croire que mon ordi me fait défaut.

Posté par
verdurin
re : Algo somme nombres premiers 25-10-15 à 00:29

Bonsoir,
je crois qu'il faut regarder la représentation des entiers avec le langage que tu utilise.
Pour donner un exemple très ancien, avec des entiers sur un octet on peut avoir 255=-1.

Posté par
alb12
re : Algo somme nombres premiers 25-10-15 à 12:10

j'imagine que tu as essaye de changer int en long ?

Posté par
fred1992
re : Algo somme nombres premiers 25-10-15 à 12:37

Salut.

J'imagine que iJava correspond à Java ? Si oui, la valeur maximale théorique pour un int est 2147483647 (deux milliards et des poussières). Quant à la valeur pratique, elle dépend de ta machine notamment de la RAM disponible au moment de l'exécution.

Le code suivant :

Citation :
int x = Integer.MAX_VALUE;
System.out.println(x);


affiche 2147483647. En incrémentant x, on obtient : -2147483648. Avec un peu de recherche, on obtient ceci :

Citation :
If an integer addition overflows, then the result is the low-order bits of the mathematical sum as represented in some sufficiently large two's-complement format. If overflow occurs, then the sign of the result is not the same as the sign of the mathematical sum of the two operand values.

Posté par
barcelonais59
re : Algo somme nombres premiers 25-10-15 à 12:49

alb12 tu as résolu mon problème ! Je te remercie vraiment. Non je ne connaissais pas le type long. En faisant des recherches, j'ai vu qu'il existait 4 différents types pour représenter un entier. Est-ce une manière d'échelonner la mémoire attribuée à notre variable ou ça n'a rien à voir ? En tout cas un grand merci encore.

Posté par
alb12
re : Algo somme nombres premiers 25-10-15 à 21:54

c'est verdurin qui a initie la reponse.
fred1992 l'a precisee.
Au hasard



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !