Pagini recente » Cod sursa (job #476002) | Cod sursa (job #1029696) | Cod sursa (job #2927376) | Cod sursa (job #3149609) | Cod sursa (job #83329)
Cod sursa(job #83329)
#include<stdio.h>
#include<math.h>
#define NMAX 1000
int p[170];
int num = 1;
long n, nr;
char a[130];
long long fr = 1;
void ciur()
{
int i, j;
for ( i = 4; i <= NMAX; i = i+2)
a[i>>3] |= ( 1<<(i&7) );
for ( i = 3; i <= NMAX; i = i+2)
{
if ( !(a[i>>3] & ( 1<<(i&7) ) ) )
for ( j = 2; j*i <= NMAX; j++)
a[ ( i*j ) >> 3] |= ( 1<<( ( i*j ) & 7 ));
}
p[1] = 2;
for ( i = 3; i <= NMAX; i = i+2 )
if ( !( a[i>>3] & ( 1<< (i&7) )))
p[++num] = i;
}
int main()
{
long i, ci, j, lim;
long phi;
freopen("fractii.in", "r", stdin);
freopen("fractii.out", "w", stdout);
scanf("%ld", &n);
ciur();
for ( i = 2; i <= n; i++)
{
ci = i;
phi = i;
lim = sqrt(ci);
for ( j = 1; p[j] <= lim && ci > 1; j++)
{
if ( ci % p[j] ==0)
{
phi = phi / p[j] * ( p[j] - 1);
while ( ci >1 && ci % p[j] == 0)
ci /= p[j];
}
}
if ( ci >1)
phi = phi / ci * (ci - 1);
fr += 2 * phi;
}
printf("%lld", fr);
return 0;
}