Pagini recente » Cod sursa (job #868238) | Cod sursa (job #1753116) | Solutii Autumn Warmup, Runda 3 | Cod sursa (job #2020221) | Cod sursa (job #3146714)
#include <bits/stdc++.h>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
const int N = 1000001;
int n,phi[N];
int main()
{
f>>n;
/// pasul 1 : pentru fiecare numar i de la 2 la n calculam indicatorul lui Euler phi[i]
/// initial la fiecare pozitie i incarcam valoarea i
for(int i=2;i<=n;i++)
phi[i]=i;
/// vom recunoste numerele prime prin faptul ca ele nu au fost afectate inca de un divizor prim
/// deci la numerele prime vom gasi initial phi[i]=i
for(int i=2;i<=n;i++)
if(phi[i]==i)/// daca numarul este prim
{
/// modific toti multiplii acestui numar prim : impart cu i, inmultesc cu i-1
for(int j=i;j<=n;j+=i)
phi[j]=phi[j]/i*(i-1);
}
/// acum calculez solutia problemei Atentie poate fi mare deci vom lua solutia pe 64 de biti !!!
int64_t sol=1LL; /// sol = 1+2*phi[2]+...+2*phi[n]
for(int i=2;i<=n;i++)
sol=sol+2*phi[i];
g<<sol;
return 0;
}