Pagini recente » Cod sursa (job #1701626) | Cod sursa (job #1411385) | Cod sursa (job #567641) | Cod sursa (job #1700305) | Cod sursa (job #2172035)
#include <fstream>
#include <bitset>
using namespace std;
ifstream in("fractii.in");
ofstream out("fractii.out");
bitset<1000002> p;
int 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];
}
}
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();
fr = fr*2 + 3;
out << fr;
return 0;
}