Pagini recente » Cod sursa (job #2603325) | Cod sursa (job #2859444) | Cod sursa (job #1422479) | Cod sursa (job #2059437) | Cod sursa (job #2414922)
#include <fstream>
#include <string.h>
#include <cmath>
using namespace std;
ifstream f("fractii.in");
ofstream g("fractii.out");
int n;
long long dp[1000005];
struct divizor
{
int div,put;
};
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)
{
divizor d[8];
memset(d,0,sizeof(d));
int di=2,k=0;
long long sol=1;
while(x>1)
{
if(x%di==0)
{
int p=0;
while(x%di==0)
x/=di,p++;
d[++k].div=di;
d[k].put=p;
}
di++;
}
for(int i=1;i<=k;i++)
sol*=(d[i].div-1)*(putlog(d[i].div,d[i].put-1));
return sol;
}
int main()
{
f>>n;
for(int i=1;i<=n;i++)
dp[i]=dp[i-1]+2*indicator(i);
g<<dp[n]-1<<'\n';
return 0;
}