Pagini recente » Cod sursa (job #807082) | Cod sursa (job #2789173) | Cod sursa (job #3001055) | Cod sursa (job #429315) | Cod sursa (job #2469300)
//fractii de pe infoarena
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
constexpr int NX = 1000005;
long long fi[NX], n;
int main()
{
cin>>n;
for(int i=1; i<=n; ++i)
{
fi[i]=i; //fac un vector cu numerele de la 1 la n
}
for(int d=2; d<=n; ++d)//incep de la 2
{
if(fi[d]==d) //daca nu a fost modificat inseamna ca e prim
fi[d]-=1; //si pun in fi[d] numerele mai mici decat d si prime cu el
//se ia si 1 in considerare ca fiind prim
for(int i=d*2; i<=n; i+=d) //dupa merg in continuare cu multiplii lui d
{
fi[i]*=(d-1); //si aplic indicatorul lui euler
fi[i]/=d;
}
}
long long suma{1};
for(int i=2; i<=n; ++i)
suma+=(2*fi[i]); //fac suma elementelor din fi de la 2 in sus si o inmultesc cu 2
cout<<suma;
return 0;
}