Bonjour à tous,
Voilà, je suis débutant en programmation, j'ai fait un petit programme permettant de créer une liste de nombre premier.
Le problème est que lorsque je crée un tableau de plus de 500000 entrées, au bout d'un certain temps, une erreur se produit et m'annonce que la mémoire n'est plus lisible.
Y a t'il une solution pour créer un tableau plus grand ?
Merci d'avance.
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58 #include <iostream> #include <math.h> bool isprime(unsigned int nbr, unsigned int *premier){ unsigned int db,racine; racine=ceil(sqrt(nbr)); db=1; // On essais de diviser "nbr" par tous les nombres premiers inférieur ou égal à sa racine while(*(premier+db)<=racine){ if(nbr%(*(premier+db))==0) return 0; db++; } return 1; } int main() { unsigned int nbr,i,k,ch; std::cout<<"TAILLE DU TABLEAU : "; std::cin>>ch; std::cout<<std::endl; if(ch<3)ch=3; unsigned int *premier=new unsigned int[ch]; // Création du tableau contenant les nombres premiers premier[0]=2; premier[1]=3; premier[2]=5; k=1; i=3; while(i!=ch) { nbr=6*k+1; // Fait que tous les nombres premiers sont congru à 6 modula 1 et congru à 6 modulo 5 if(isprime(nbr,premier)==1){ premier[i]=nbr; i++; } nbr=6*k+5; if(isprime(nbr,premier)==1){ premier[i]=nbr; i++; } k++; } std::cout << "Le dernier nombre premier trouvé est : " <<premier[ch-1]<< std::endl; delete[] premier; return 0; }
Partager