Pagini recente » Cod sursa (job #1310527) | Cod sursa (job #410659) | Cod sursa (job #1196203) | Cod sursa (job #460170) | Cod sursa (job #2370595)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ciur.in");
ofstream fout("ciur.out");
int n;
bool v[2000005];
//optimizat
int sieve1()
{
int k=1;
for(int i=4; i<=n; i+=2)
v[i]=1;
v[0]=v[1]=1;
for(int i=3; i*i<=n; i+=2)
if(!v[i])
{
k++;
for(int j=i*i; j<=n; j+=i)
v[j]=1;
}
return k;
}
//clasic
int sieve2()
{
int k=0;
for(int i=2; i<=n; i++)
if(!v[i])
{
k++;
for(int j=2*i; j<=n; j+=i)
v[j]=1;
}
return k;
}
//optimizat pe biti
int sieve3()
{
///!!v unsigned char
int k=1, i2;
for(int i=3; i<=n; i+=2)
{
if(v[i>>4] & (1<<((i>>1)&7)))
continue;
k++;
for(int j=i+(i2=2*i); j<=n; j+=i2)
v[j>>4]|=1<<((j>>1)&7);
}
return k;
}
int main()
{
fin >> n;
fout << sieve1();
return 0;
}