Pagini recente » Cod sursa (job #931573) | Cod sursa (job #2973220) | Cod sursa (job #2953322) | Cod sursa (job #1967902) | Cod sursa (job #1741174)
#include <cstdio>
#include <cmath>
using namespace std;
const int MAXN = 1000;
const int MAXP = 168;
bool c[MAXN + 5];
int prime[MAXP + 5];
void ciur(int n){
int rad, i, j;
rad = sqrt(n);
c[0] = c[1] = 1;
for (i = 4; i <= n; i += 2)
c[i] = 1;
for (i = 3; i <= rad; i += 2)
if (!c[i])
for (j = i * i; j <= n; j += 2 * i)
c[j] = 1;
}
void numere_prime(int n, int &k){
int i;
ciur(n);
prime[1] = 2;
for (i = 3; i <= n; i ++)
if (!c[i])
prime[++k] = i;
}
int mypow(int a, int b){
int ans = 1;
for (; b; b >>= 1){
if (b & 1)
ans *= a;
a *= a;
}
return ans;
}
int euler(int n, int k){
int p, e, d;
d = p = 1;
while (prime[d] * prime[d] <= n && d <= k){
e = 0;
while (n % prime[d] == 0){
n /= prime[d];
e ++;
}
if (e)
p *= (prime[d] - 1) * mypow(prime[d], e - 1);
d ++;
}
if (n > 1)
p *= (n - 1);
return p;
}
int main(){
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
int n, i, k = 1;
long long s = 0;
scanf("%d", &n);
numere_prime(sqrt(n), k);
for (i = 1; i <= n; i ++)
s += euler(i, k);
printf("%lld\n", 2 * s - 1);
return 0;
}