Pagini recente » Cod sursa (job #2174267) | Cod sursa (job #938434) | Cod sursa (job #1390420) | Cod sursa (job #1888870) | Cod sursa (job #2469293)
//fractii de pe infoarena
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
constexpr int NX = 10000010;
int main()
{
int n, fi[NX];
fin>>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;
}
}
int 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
fout<<suma;
return 0;
}