Cod sursa(job #2872892)

Utilizator FilippppFilip Gruianu Filipppp Data 18 martie 2022 09:07:51
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <iostream>

using namespace std;
const int N=2000000+2;
bool v[N];
int main()
{
    freopen ("ciur.in", "r", stdin);
    freopen ("ciur.out", "w", stdout);

    int n,p=0;
    cin>>n;
    v[2] = 1;

    for (int i=3;i<=n;i+=2)
    {
        v[i] = 1;
    }

    for (int i=3;i<=n;i+=2)
    {
        if (v[i] == 1)
        {
            for (int j=i*i;j<=n;j+=2*i)
            {
                v[j] = 0;
            }
        }
    }
    for (int i=2;i<=n;i++)
    {
       if (v[i] == 1)
       {
           p++;
       }
    }
    cout<<p;
}
/**

pentru un j vrem sa verificam daca divizibil cu orice numar prim p cu p<=sqrt(j)


p<=sqrt(j)
p*p<=j

i*i<=j



10
x = divizor al lui n => n/x este divizor al lui n


2 e divizor al lui 10
5 e divizor al lui 10

i<=sqrt(n) => i*i<=n
i>sqrt(n) => i*i>n


sqrt(n)*sqrt(n)=n
sqrt(n)=n/sqrt(n)

i<=sqrt(n) =>
i<=n/sqrt(n)
i*sqrt(n)<=n
sqrt(n)<=n/i


sqrt(10)=3.ceva
(2, 5)

8*8=64

4 16


daca x e compus atunci x are un divizor prim p cu p<x


am gasit un divizor prim p
daca p<=sqrt(x)
altfel avem p>sqrt(x) => x/p<=sqrt(x)

daca x e compus atunci x are un divizor prim p cu p<=sqrt(x)



**/