Cod sursa(job #2033957)

Utilizator ptudortudor P ptudor Data 7 octombrie 2017 12:13:39
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <iostream>
#include <fstream>
using namespace std;
int v[1000000];
int n;
int test(int x,int p)
{
    int i=1;
    while (x%p==0)
    {
        x=x/p;
        i=i*p;
    }
    return i;
}
long long ciur()
{
    int i,j;
    v[0]=1;
    v[1]=1;
    for (i=4;i<=n;i=i+2)
    {
        v[i]=1;
    }
    for (i=3;i*i<=n;i=i+2)
    {
        for (j=i*i;j<=n;j=j+i*2)
            v[j]=1;
    }
    int p,c;
  v[2]=1;
    for (i=4;i<=n;i=i+2)
    {
      p=test(i,2);
      v[i]=p-p/2;
   //   cout<<i<<" "<<p<<" "<<p/2<<" "<<v[i]<<"\n";
    }
    for (i=3;i<=n;i=i+2)
    {

        if (v[i]==0)
        {
            v[i]=i-1;
            for (j=i+i;j<=n;j=j+i)
            {
                p=test(j,i);
                v[j]=v[j]*(p-p/i);
            }
        }
    }
    long long s=0;
    for (i=2;i<=n;i++)
        s=s+v[i];
    return s*2+1;
}
int main()
{
ifstream in("fractii.in");
ofstream out("fractii.out");
in>>n;
out<<ciur();
int i;
out.close();
in.close();
return 0;
}