Cod sursa(job #530325)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 7 februarie 2011 15:49:08
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.72 kb
#include <iostream>
#define N 1000005
using namespace std;
#include <math.h>
int n;
int ok;
int sum;
char sir[N];
long long j;
int modul(int u) {
    int p = u / 2;
    if (2 * p == u) return 0;
    return 1;
}
int main() {
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    scanf("%d",&n);
    for(int i = 1; i <= n / 2; i++)
     sir[i] = 1;
    int rad = sqrt(n);
    for(int i = 1; 2 * i + 1 <= rad + 1; i++)
     if (sir[i] == 1) {
         for(j = (2 * i + 1) * (2 * i + 1); j <= n; j += (2 * i + 1))  {
             if (modul(j) == 1)
              sir[j/2] = 0;
         }
     }
     for(int i = 1; 2 * i + 1 <=n; i++)
      sum += sir[i];
     printf("%d\n",sum + 1);
}