Cod sursa(job #1241389)

Utilizator atelaluCazan Alexandru atelalu Data 13 octombrie 2014 14:44:06
Problema Ciurul lui Eratosthenes Scor 30
Compilator cpp Status done
Runda Arhiva educationala Marime 0.65 kb
#include <cstdio>
#include <cmath>
using namespace std;
int cmmdc(int a, int b)
{
    int r;
    do
    {
        r=a%b;
        a=b;
        b=r;
    }while(b);
    return a;
}
int prim(int p)
{
    int i;
    int val=(int)sqrt((double)p);
    if(p==2)
        return 1;
    if(p<2)
        return 0;
    if((p&1)==0)
        return 0;
    for(i=3;i<=val;i=i+2)
    {
        if(cmmdc(p,i)!=1)
            return 0;
    }
    return 1;
}
int main()
{
    freopen("ciur.in","r",stdin);
    freopen("ciur.out","w",stdout);
    int n,i,nr=0;
    scanf("%d",&n);
    for(i=2;i<=n;++i)
    {
        if(prim(i))
            nr++;
    }
    printf("%d",nr);
    return 0;
}