Pagini recente » Cod sursa (job #2159738) | Cod sursa (job #46740) | Cod sursa (job #2071140) | Cod sursa (job #890074) | Cod sursa (job #1197776)
using namespace std;
#include <fstream>
ifstream fin("fractii.in");
ofstream fout("fractii.out");
const int Nmax = 1000000;
int nr[Nmax+5], n;
bool isPrime[Nmax+5];
int prim[100000], nrP=1;
void ciur() ;
void calc(int) ;
int main()
{
int i, j;
long long s = 1;
fin>>n;
//ciur();
for(i=1; i<=n; ++i) nr[i] = i;
for(i=2; i<=n; ++i)
{
if(nr[i]==i)
for(j=i; j<=n; j+=i) nr[j] = nr[j] / i * (i-1);
s += 1LL*nr[i];
}
fout<<2*s-1<<'\n';
return 0;
}
void ciur()
{
int i, j;
for(i=2; i<=n; ++i) isPrime[i] = i%2;
prim[0] = 2;
for(i=3; i<=n; ++i)
{
while(!isPrime[i] && i<=n) ++i;
if(i<=n) prim[nrP++] = i;
for(j = i+i+i; j<=n; j += i+i) isPrime[j]=0;
}
}
void calc(int x)
{
if(x==1) {nr[1] = 1; return;}
int rez = x, d, firstD;
for(d=0; x%prim[d]!=0; ++d) ; firstD = prim[d];
for(; prim[d]<=x && d<nrP; ++d)
if(x%prim[d]==0) rez = rez / prim[d] * (prim[d]-1);
nr[x] = rez;
for(; x<=n; x *= firstD, rez *= firstD)
nr[x] = rez;
}