Pagini recente » Cod sursa (job #1376965) | Cod sursa (job #1458239) | Cod sursa (job #1447100) | Cod sursa (job #1887954) | Cod sursa (job #2414932)
#include <fstream>
#include <string.h>
#include <cmath>
#define xmax 1000000
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
int n,prim[xmax];
long long dp[1000005];
bool b[1000005];
void ciurul()
{
for(int i=2;i<=xmax;i++)
if(!b[i])
{
for(int j=i+i;j<=xmax;j+=i) b[j]=1;
prim[++prim[0]]=i;
}
}
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)
{
int i1=1;
long long sol=1;
while(x>1)
{
if(x%prim[i1]==0)
{
int p=0;
while(x%prim[i1]==0)
x/=prim[i1],p++;
sol*=(prim[i1]-1)*(putlog(prim[i1],p-1));
}
i1++;
}
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;
}