Pagini recente » Cod sursa (job #2967845) | Cod sursa (job #3260894) | Cod sursa (job #2170989) | Cod sursa (job #789060) | Cod sursa (job #1315985)
#include <iostream>
#include<math.h>
using namespace std;
#define MX 500000010
char c[MX] ;
int n,nr;
int b(int i) // intoarce valoare bitului i
{
int ind;
short x;
ind=i/8;
x=i%8;
if (!x) x=8;
else ind++;
char p=1<<(x-1);
if (!(p&c[ind] )) return 0;
return 1;
}
void mark(int i) // seteaza bitul i cu 1
{
int ind;
short x;
ind=i/8; // pozitia din array
x=i%8; // pozitia din reprezentarea char-ului
if (!x) x=8;
else ind++;
c[ind]|=1<<(x-1);
}
int main()
{
n=100;
int i,j;
for (i=2;i<=sqrt(n) ;i++ ) // numara elementele prime de la 2 pana la sqrt(n)
{
if (!b(i) ) // daca bitul i e 0
{
nr++; // creste nr de prime
cout<<i<<" ";
for (j=2; j*i<=n; j++)
mark(i*j); // seteaza bitul i*j cu 1
}
}
for (;i<=n; i++ )
if (i%2!=0 && !b(i) ) {nr++; cout<<i<<" "; } // numara elementele prime de la sqrt(n) pana la n
cout<<"\n" <<nr;
return 0;
}