Pagini recente » Cod sursa (job #2842749) | Cod sursa (job #182624) | Cod sursa (job #1572312) | Cod sursa (job #1994219) | Cod sursa (job #108431)
Cod sursa(job #108431)
#include <cstdio>
#include <cstdlib>
#include <cstring>
const int N = 1000000;
const int NP = 78498;
int prime[NP], np = 0;
int phi[N];
void ciur() {
const int MX = 1000000;
bool* pr = (bool*) malloc(sizeof(bool)*(MX+1)); memset(pr,true,sizeof(bool)*(MX-1));
pr[0] = pr[1] = false;
for (int i = 2; i <= MX; ++i) {
if (pr[i]) {
for (int j = 2; i*j <= MX; ++j) pr[i*j] = false;
prime[np++] = i;
}
}
}
int main() {
freopen("fractii.in","rt",stdin);
freopen("fractii.out","wt",stdout);
int n = 0;
scanf("%d",&n);
ciur();
long long s = 1;
phi[1] = 1;
for (int i = 2; i <= n; ++i) {
int p,e,ple,x;
for (p = 0; p < NP && i % prime[p] != 0; ++p);
for (x = i, e = 0, ple = 1; x % prime[p] == 0; x /= prime[p], ++e) ple *= prime[p];
phi[i] = (prime[p]-1)*(ple/prime[p])*phi[x];
s += 2*phi[i];
}
printf("%lld\n",s);
return 0;
}