Cod sursa(job #530322)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 7 februarie 2011 15:42:09
Problema Ciurul lui Eratosthenes Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 0.67 kb
#include <iostream>
#define N 20000005
using namespace std;
#include <math.h>
int n;
int ok;
int cnt;
int 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; 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;
         }
         cnt++;
     }
     printf("%d\n",cnt + 1);
}