Cod sursa(job #77229)
#include <iostream>
#include <fstream>
using namespace std;
//---------------------------------------------------------------------------
int prim[1000000];
ifstream input("fractii.in");
ofstream output("fractii.out");
int n;
long long sum;
int citire()
{
input >> n;
input.close();
return 0;
}
int totient(int x)
{
if (prim[x]) return (x-1);
else
{
float rez=x;
int div[10000],k=0;
for (int i=2;i<=x/2;i++)
if (x % i == 0 && prim[i])
{
k++;
div[k]=i;
}
if (k==1) return (x-x/div[1]);
else
{
for (int i=1;i<=k;i++)
rez=rez-rez/div[i];
return int(rez);
}
}
}
void ciur()
{
for (int i=0;i<1000001;i++)
{
prim[i]=true;
}
for (int i=2;i<1000001;i++)
{
if (prim[i])
for(int j=2*i;j<1000001;j=j+i)
prim[j]=false;
}
}
int main(int argc, char* argv[])
{
citire();
sum = 1;
ciur();
for (int i=2;i<=n;i++)
sum = sum + 2*totient(i);
output << sum;
output.close();
return 0;
}
//---------------------------------------------------------------------------