Pagini recente » Monitorul de evaluare | Istoria paginii preoni-2007 | Monitorul de evaluare | Cod sursa (job #2023139) | Cod sursa (job #2102489)
#include <fstream>
#include <bitset>
#include <cmath>
using namespace std;
ifstream fin("fractii.in");
ofstream fout("fractii.out");
int v[1000005], p[80000];
void mark_prim_numbers()
{
int nr = 0;
for(int i = 2; i <= 500000; ++i)
if(!v[i]){
nr++;
p[nr] = i;
for(int j = 2; i * j <= 1000000; ++j){
v[i * j] = 1;
}
}
}
int main()
{
int n;
fin >> n;
mark_prim_numbers();
v[1] = 1;
int nr;
for(int i = 2; i <= 1000000; ++i)
if(!v[i]) v[i] = i - 1;
else v[i] = 0;
int x, y, sum = 3;
for(int i = 4; i <= n; ++i){
if(!v[i]){
nr = 1;
x = i;
y = 1;
while(i % p[nr] != 0) nr++;
while(x % p[nr] == 0){
x /= p[nr];
y *= p[nr];
}
y /= p[nr];
v[i] = y * (p[nr] - 1) * v[x];
sum += v[i];
}
else sum += v[i];
}
fout << 1 + 2 * sum;
return 0;
}