Buna, as vrea sa stiu daca mai pot optimiza cumva urmatorul cod:
#include <stdio.h>
#include <stdbool.h>
#define MAXSIZE 1000000000
long long i,j,n,i1,i2,m=2,i22,i11;
bool a[MAXSIZE];
int main()
{
scanf("%i",&n);
for(i=6;i<n;i+=6)
{
i1=i-1;
i2=i+1;
if(!a[i1])
{
m++;
i11=i1*6;
for(j=i11+i1;j<=n;j+=i11)
a[j]=1;
for(j=i1*i1;j<=n;j+=i11)
a[j]=1;}
if(!a[i2])
{
m++;
i22=i2*6;
for(j=i22+i2;j<=n;j+=i22)
a[j]=1;
}
}
printf("%i",m);
return 0;
}
Nu stiu daca s-a mai folosit aceasta metoda de generare a numerelor prime. Genereaza toate numerele prime pana la 10.000.000 sub 0.4s. Am vazut alte programe de generare optimizate cu operati pe biti, eu nu prea stiu sa lucrez pe biti si as vrea sa stiu daca se poate optimiza si programelul meu pe biti si cum

EDIT:
Ideea folosita este ca orice numar prim este de forma 6k+1 sau 6k-1(numerele mai mari de 5).iar pentru multiplii,am folosit urmatoarea metoda:
daca scriem numerele sub forma
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 59 60
61 62 63 64 65 66
67 68 69 70 71 72
73 74 75 76 77 78
79 80 81 82 83 84
85 86 87 88 89 90
91 92 93 94 95 96
97 98 99 100 101 102
103 104 105 106 107 108
109 110 111 112 113 114
115 116 117 118 119 120
121 122 123 124 125 126
127 128 129 130 131 132
133 134 ...
toate numerele prime sunt pe doua coloane(1 si 5) si daca numeri pe coloana pe care se afla numarul n exact n linii in jos gasesti un multiplu de-al lui, asa am marcat toti multipli, o problema a fost cu coloana 5 deoarece daca inmulteam doua numere de pe coloana 5 rezultatul era pe coloana 1
Am editat si codul... e putin mai optimizat
