Pagini recente » Cod sursa (job #1780482) | Cod sursa (job #2172854) | Cod sursa (job #2201982) | Cod sursa (job #2375981) | Cod sursa (job #2263991)
#include <stdio.h>
int Get(char vec[], int pos)
{
int block = pos / 8;
int offset = pos % 8;
if (vec[block] & (1 << offset)) {
return 1;
}
return 0;
}
void Set(char vec[], int pos, int val)
{
int block = pos / 8;
int offset = pos % 8;
if (val == 0) {
vec[block] &= (~(1 << offset));
} else {
vec[block] |= (1 << offset);
}
}
#define NMAX 2000000
char is_not_prime[NMAX / 8 + 5];
int main()
{
FILE *fin = fopen("ciur.in", "r");
FILE *fout = fopen("ciur.out", "w");
int n;
fscanf(fin, "%d", &n);
int prime_count = 0;
for (int i = 2; i <= n; i += 1) {
if (Get(is_not_prime, i)) {
continue;
}
prime_count += 1;
for (long long int j = 1LL * i * i; j <= n; j += i) {
Set(is_not_prime, j, 1);
}
}
fprintf(fout, "%d\n", prime_count);
return 0;
}