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 !
salut
je ne connais pas trop ce langage ... mais ::
Salut carpediem && correspond à l'opérateur booléen AND; i%j correspond au reste de la division euclidienne de i par j.
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 ...
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 ?
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.
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.
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 :
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.
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :