Salut ,
Je veut fair un programme avec Qt qui donne les nombres premiers jusqu'a un nombre n.
Ce qui est bizzard c'est que mon programme marche dans un programme en console mais avec Qt il y a problème.
Avant de vous donnez mon souci je commence par vous expliquer mon résonnement pour trouver tous les nombre premier avant un nombre n, cette technique je l'ai trouver dans un livre de math français termnal S.
1)On draisse une liste de tous les nombre aprés 2 et qui sont <=n.//c'est a dire {2,3,4,5,6,7,8,9,10...,n}.
2)On met à 0 tous les multiples du 2.// sa donne {2,3,0,5,7,0,9,0,...,n}
3)Puis je prend le 1er chiffre non- NULL aprés le 2 (c'est a dire "3" dans notre cas et on barre tous ses multiples.// sa donne {2,3,0,5,7,0,0,0...,n}
...ainsi de suite j'usqu'a n (où j'usqu'a la racine carre de n).
Voila voici les codes sources importants.
Et voici celle qui pose souci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 /*Dans cette fonction y a rien n'a dire c'est elle qui prend le nombre n, puis le transfere a la fonction getNbrPremier (la fonction qui pose problaime)*/ void MonWidget::getNbr() { int nombre= QInputDialog::getInteger(this,"Jusqu'à?","Donne les nombre premiers j'usqu'à n, n=",2,2,100000); QString text(getNbrPremier(nombre));//cette fonction renvoie un QString contenan la liste des nbr premiers. emit afficheNbrPremier(text); }
La ligne qui pose problème dit:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 QString MonWidget::getNbrPremier(int nbr) { int *liste= new int[nbr+1]; int racineCarre= floor(sqrt(nbr)),n=2; QString L2; for(int i=0;i<=nbr;i++) { liste[i]=n; n++; } for(int i=0 ; i<=racineCarre ; i++) { if(liste[i]!=0) { for(int j=(i+1) ; j<=nbr ; j++) { if((liste[j]/liste[i])-floor(liste[j]/liste[i])==0)/*je ne sai pas pour quoi, mais dans un prgm Qt cette conditon est tjr vrai, alor qu'en console sa marche bien.vous trouverez plus bas ce quel signifie.*/ liste[j]=0; } } } // le reste ne pose aucun problaime. for(int i=0;i<nbr;i++) { if(liste[i]!=0) { L2.insert(L2.size(),QString("%1;").arg(liste[i])); } } delete liste; return L2; }
Si le nombre liste[j] est multiple de liste[i].
PS:Au cas ou vous voudriez savoir, sachez que tous se passe dans une classe nommée MonWidget.
S.V.P aidez-moi , merci .
Partager