Pagini recente » Cod sursa (job #2179377) | Cod sursa (job #2601666) | Cod sursa (job #2644922) | Cod sursa (job #996384) | Cod sursa (job #1315989)
#include <fstream>
#include<math.h>
using namespace std;
#define MX 2000010
char c[MX] ;
int n,nr;
ifstream f1("ciur.in");
ofstream f2("ciur.out");
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()
{
f1>>n;
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
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++; // numara elementele prime de la sqrt(n) pana la n
f2<<nr;
f2.close();
return 0;
}