Pagini recente » Cod sursa (job #2491585) | Cod sursa (job #822860) | Cod sursa (job #1219862) | Cod sursa (job #767233) | Cod sursa (job #2415133)
#include <fstream>
#include <string.h>
#include <cmath>
#define xmax 1000000
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
int n,prim[1000001][8];
long long dp[1000005];
void ciurul()
{
for(int i=2;i<=xmax;i++)
if(!prim[i][1])
{
for(int j=i+i;j<=xmax;j+=i) prim[j][++prim[j][0]]=i;
prim[i][1]=i;
prim[i][0]=1;
}
}
long long putlog(int b,int a)
{
long long r=1;
while(a)
{
if(a&1)
r=(1LL*r*b);
b=(1LL*b*b);
a/=2;
}
return r;
}
long long indicator(int x)
{
long long sol=1;
int nr=prim[x][0],aux=x;
for(int i=1;i<=nr;i++)
{
int p=0;
while(aux%prim[x][i]==0&&x>1)
aux/=prim[x][i],p++;
sol*=(prim[x][i]-1)*(putlog(prim[x][i],p-1));
}
return sol;
}
int main()
{
f>>n;
ciurul();
if(n==1)
{
g<<1<<'\n';
return 0;
}
if(n==2)
{
g<<3<<'\n';
return 0;
}
dp[1]=1;
dp[2]=3;
for(int i=3;i<=n;i++)
dp[i]=dp[i-1]+2*indicator(i);
g<<dp[n]<<'\n';
return 0;
}