Pagini recente » Cod sursa (job #2143997) | Cod sursa (job #884380) | Cod sursa (job #2145495) | Cod sursa (job #1884229) | Cod sursa (job #2172137)
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("fractii.in");
ofstream out("fractii.out");
//bitset<1000002> p;
unsigned long long eul[1000001], i, n, j, fr;
/*int putere(int x, int y) {
if(y < 0) x = 1/x, y = -y;
else if(y == 0) return 1;
else {
int k = 1;
while(y > 1) {
if(y%2 ==0) {
x = x*x;
y = y/2;
} else {
k = x*k;
x = x*x;
y = (y-1)/2;
}
}
return x*k;
}
}*/
void euler() {
/*eul[1] = 1; eul[2] = 1; eul[3] = 2;
for(int m = 3; m <= n; m++) {
int x = m;
if(x == 1) eul[x] = 1;
else if(p.test(x) == 0) eul[x] = x-1;
else {
int d = 2, p = 0, e = 1;
while(x > 1) {
p = 0;
while(x%d==0) {
x = x/d;
p++;
}
if(p!=0) e = e*(d-1)*putere(d, p-1);
d++;
}
eul[m] = e;
}
fr += eul[m];
}*/
/*for (i = 1; i <= n; ++i) eul[i] = i-1, fr += i-1;
for (i = 2; i <= n; ++i) {
for (j = 2*i; j <= n; j += i) eul[j] -= eul[i], fr -= eul[i];
}*/
for (int i=1;i<=n;i++) eul[i]=i;
for (int i=2;i<=n;i++) {
if (eul[i]==i) for (j=i;j<=n;j+=i) eul[j] /=i, eul[j] *= (i-1);
}
}
int main()
{
in >> n;
/*p.set(1, 1);
for(i = 2; i*i <= n; i++) {
if(p.test(i) == 0) for(j = i*i; j <= n; j = j+i) p.set(j, 1);
}*/
euler();
for (int i=2;i<=n;i++) fr += eul[i];
out << fr*2 + 1;
return 0;
}