Pagini recente » Cod sursa (job #2018260) | Cod sursa (job #1105945) | Cod sursa (job #144791) | Cod sursa (job #691666) | Cod sursa (job #1470156)
#include <stdio.h>
#include <stdlib.h>
#define iname "ciur.in"
#define oname "ciur.out"
union
{
char oct[4];
int val;
}hit[65000];
int N,cnt;
inline int ciuruit(int val)
{
int i = val / 32, bit = (val % 32), oct = bit / 8, bito = bit % 8;
char masca = 1 << bito;
if(hit[i].oct[oct] & masca) return 1;
return 0;
}
void ciuruie(int val)
{
int i = val / 32, bit = (val % 32), oct = bit / 8, bito = bit % 8;
char masca = 1 << bito;
hit[i].oct[oct] |= masca;
}
int getNumber()
{
int i, aux;
for(i = 2; i <= N/2; i++)
if(!ciuruit(i))
{
cnt++;
aux = i + i;
while(aux <= N) ciuruie(aux), aux += i;
}
for(i = N/2+1; i<= N; i++)
if(!ciuruit(i)) cnt++;
return cnt;
}
int main()
{
FILE *in = fopen(iname, "r");
FILE *out = fopen(oname, "w");
fscanf(in,"%d", &N);
fprintf(out,"%d", getNumber());
return 0;
}