Pagini recente » Cod sursa (job #1387842) | Cod sursa (job #1525351) | Cod sursa (job #2662271) | Cod sursa (job #1659448) | Cod sursa (job #65263)
Cod sursa(job #65263)
#include <stdio.h>
#include <math.h>
long n;
long k;
long long prim[1000000];
int x[100],nx;
void adunare(long long a)
{
register long long i=1;
long long h=a+x[1];
x[1]=h%10;
long long t=h/10;
while (t!=0)
{
i++;
if (i>nx)
nx++;
h=t+x[i];
x[i]=h%10;
t=h/10;
}
}
void ciur()
{
int p[10000000]={0};
long i;
prim[0]=2;
for (i=3;i<=n;i+=2)
{
if (p[i]==0)
{
prim[++k]=i;
register long long j;
for (j=i*i;j<=n;j+=i)
p[j]=1;
}
}
prim[k+1]=10000000;
}
long long teta(long n)
{
/* register long i;
long long pl=n;
int c=0;
while (n%2==0)
{
n/=2;
c=1;
}
if (c==1)
pl=pl/2;
long d=3;
while (n!=1)
{
c=0;
while (n%d==0)
{
n/=d;
c=1;
}
if (c==1)
pl=(pl/d)*(d-1);
d+=2;
}*/
register long i;
long long pl=n;
for (i=0;prim[i]<=n;i++)
if (n%prim[i]==0)
pl=(pl/prim[i])*(prim[i]-1);
return pl;
}
int main()
{
x[1]=1;
freopen("fractii.in","r",stdin);
freopen("fractii.out","w",stdout);
scanf("%lld",&n);
ciur();
register long i;
for (i=2;i<=n;i++)
{
adunare(2*teta(i));
}
for (i=nx;i>=1;i--)
printf("%d",x[i]);
fclose(stdout);
return 0;
}