Cod sursa(job #835238)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 15 decembrie 2012 21:14:26
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
/**
Voi defini sirul lui Eratostene ca fiind un vector cu n elemente.
2 3 4 ... n
Mod de gasire a nr prime:
- presupunem a fiecare nr este prim:
    vect : 2 3 4 ... n
 is_prime: 1 1 1 ... 1
- daca termenul i (i=1-n) este prim ,toti multiplii acelui numar SIGUR
nu sunt primi:
   i=1;
   vect : 2 3 4 5 6 7 8 ... n
          1 1 0 1 0 1 0 ... 1
   i=2;
   vect : 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ... n
          1 1 0 1 0 1 0 0  0  1  0  1  0  0 ... 1
   s.a.m.d

   GOT SPEED ? determinare a tuturor nr prime < 2.000.000 in 0.078 secunde !!
*/
#include <string.h>
#include <stdio.h>
using namespace std;
char prime[2000001];
int n;
void scoate(int a)
{
    int i;
    for(i=2;i*a<=n;i++)
    {
        prime[i*a]='0';
    }
}
int main()
{
    FILE *f=fopen("ciur.in","r");
    int oky=0;
    fscanf(f,"%d",&n);
    fclose(f);
    f=fopen("ciur.out","w");
    int i;
    memset(&prime,'1',sizeof(prime));
    for(i=2;i<=n;i++)
    {
        if(prime[i]=='1')
        {scoate(i);
         oky++;
        }
    }
    fprintf(f,"%d",oky);
    return 0;
}