Cod sursa(job #677712)

Utilizator gabrielvGabriel Vanca gabrielv Data 10 februarie 2012 16:00:56
Problema Ciurul lui Eratosthenes Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.77 kb
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;

int main()
{
 int limit;

 ifstream f("ciur.in");
 ofstream g("ciur.out");

 f>>limit;

 char A[limit];
 long int i,j,x;

 for (i=1;i<limit;i++)
 {
 A[i] = 0;
 }  

 for (i=1;i<=sqrt(limit);i++)
 for (j=1;j<=sqrt(limit);j++)
 {
    x = 4*i*i+j*j;
    if (x<limit) if ((x % 12==1) || (x % 12==5)) A[x] = !A[x];
    x = 3*i*i+j*j;
    if (x<limit) if (x % 12==7) A[x] = !A[x];     
    x = 3*i*i-j*j;     
    if (i>j) if (x<limit) if (x % 12==11) A[x] = !A[x];
 }

 for (i=5;i<=sqrt(limit);i++)
 {
     x = i*i;
     j = 1;
 while (j*x<limit)
 {
       A[j*x] =0;
       j++;
 }
 }  

 A[2] = 1;
 A[3] = 1;

 x = 0;
 for (i=2;i<limit;i++) if (A[i]) x++;

 g<<x;
}