Pagini recente » Cod sursa (job #2478695) | Cod sursa (job #1116875) | Cod sursa (job #343501) | Cod sursa (job #2909806) | Cod sursa (job #3267758)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("fractii.in");
ofstream g ("fractii.out");
const int NMAX = 1000000;
int phi[NMAX + 5];
void fill_phi(int n)
{
phi[1] = 1;
phi[2] = 1;
phi[3] = 2;
int k;
for(k = 4; k <= n; ++k)
{
///calc phi[k] in baza val gasite anterior
int d;
bool ok = 1;
for(d = 2; d*d <= k && ok; ++d)
{
if(k % d == 0)
{
ok = 0;
int exponent = 1;
int copie = k;
while(copie % d == 0)
{
exponent *= d;
copie /= d;
}
///exponent = d^{v_d(k)}
phi[k] = (d-1)*(exponent/d)*phi[k/exponent];
}
}
if(ok == 1)
phi[k] = k - 1;
}
}
int main()
{
int n, i;
f >> n;
fill_phi(n);
long long suma = 0;
for(i = 1; i <= n; ++i)
suma += phi[i];
g << 2*suma - 1;
return 0;
}