Pagini recente » Cod sursa (job #1545881) | Cod sursa (job #1540619) | Cod sursa (job #2227852) | Cod sursa (job #1388301) | Cod sursa (job #232920)
Cod sursa(job #232920)
/*
* main.cpp
*
* Created on: Dec 16, 2008
* Author: uidn3527
*/
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
int totients[1000001];
void getdivizor(int nr,int &div,int &pow,int &remain)
{
if (nr %2 == 0)
{
div = 2;
pow = 1;
nr /=2;
while (nr % 2 ==0)
{
nr = nr / 2;
pow*=2;
}
remain = nr;
return;
}
for (int d=3;d<=sqrt(nr);d+=2)
{
if (nr%d==0)
{
div = d;
pow =1;
nr /=d;
while (nr % d ==0)
{
nr = nr / d;
pow*=d;
}
remain = nr;
return;
}
}
div = nr;
pow = 1;
remain = 1;
return;
}
int main(int argc, char **argv)
{
ifstream fin("fractii.in");
ofstream fout("fractii.out");
totients[1]=1;
int div;
int pow;
int remain;
for (int i=2;i<=1000000;i++)
{
getdivizor(i,div,pow,remain);
totients[i]=totients[remain]*((div-1)*pow);
}
int nr;
fin>>nr;
long long answ=0;
for (int i=1;i<=nr;i++)
answ+=(long long)totients[i];
answ*=2LL;
answ-=1LL;
fout<<answ<<endl;
fin.close();
fout.close();
}