Pagini recente » Cod sursa (job #146743) | Cod sursa (job #1684846) | Cod sursa (job #109920) | Cod sursa (job #2971368) | Cod sursa (job #1553344)
#include <cstdio>
#define MAX 1000000
using namespace std;
long long ciur[MAX+1], eu[MAX+1], put[MAX+1];
void ciuruire(int n)
{
int prim=2, i;
while(prim*prim<=n)
{
for(i=prim;i*prim<=n;i++)
{
ciur[i*prim]=1;
put[i*prim]=prim;
}
prim++;
while(ciur[prim]==1)
prim++;
}
}
int main()
{
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
long long n, i, j, pp, suma, ci;
scanf("%lld", &n);
ciuruire(n);
suma=0;
for(i=2;i<=n;i++)
{
if(ciur[i]==0){
suma+=i-1;
eu[i]=i-1;
}
else{
ci=i;
pp=1;
while(ci%put[i]==0)
{
ci/=put[i];
pp*=put[i];
}
if(ci==1)
{
eu[i]=(put[i]-1)*(pp/put[i]);
suma+=eu[i];
}
else{
eu[i]=eu[pp]*eu[ci];
suma+=eu[i];
}
}
}
printf("%lld", suma*2+1);
return 0;
}