Cod sursa(job #1061772)

Utilizator seby5381Marinescu Sebastian seby5381 Data 20 decembrie 2013 11:49:11
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<cstdio>
#include<cmath>
using namespace std;
int n,i,nr,j,v[100000],a[1000000],k,aux,poz,p,put,nrr,pz;

void ciur();

int main()
{
    freopen("fractii.in","r",stdin);
    freopen("fractii.out","w",stdout);
    scanf("%d",&n);
    ciur();
    k=0;
    for(i=2;i<=n;i++)
    {
        aux=i;
        poz=1;
        p=1;
        while(aux>1)
        {
            put=0;
            while(aux%v[poz]==0)
            {
                put++;
                aux/=v[poz];
            }
            if(put>0) p*=(v[poz]-1)*pow(v[poz],put-1);
            poz++;
        }
        k+=p;
       /* j=pz;
        while(1)
        {
           if(v[j]>i) k++;
           else break;
           j--;
        }*/

    }
    printf("%d",2*k+1);
    return 0;
}


void ciur()
{
    int u;
    v[1]=2;
    nr=1;
    for(i=3;i<=1000;i+=2)
    {
        if(a[i]==0)
            for(j=i+i;j<=1000000;j+=i)
                a[j]=1;
    }
    u=0;
    for(i=3;i<=1000000;i+=2)
    {
        if(a[i]==0)
        {
            nr++;
            v[nr]=i;
            if(v[nr]>n&&u==0) nrr=v[nr], pz=nr-1, u=1;
        }
    }
}