Pagini recente » Cod sursa (job #503284) | Cod sursa (job #1797894) | Cod sursa (job #1431268) | Istoria paginii utilizator/uaic_buruiana_oprea_ouatu | Cod sursa (job #42947)
Cod sursa(job #42947)
// Problema fractii
#include <stdio.h>
#define MAX 1000001
char p[MAX];
short prim[MAX];
long tot( long m )
{
long i, rez = m;
for( i=2; i<=m; i++ )
if( !(m%i) && (prim[i]) )
{
rez /= i;
rez *= (i-1);
}
return rez;
}
int main()
{
freopen( "fractii.in", "rt", stdin );
long n;
scanf( "%ld", &n );
fclose( stdin );
long i, j;
for (i = 1; ((i * i) << 1) + (i << 1) <= n; i += 1) {
if ((p[i >> 3] & (1 << (i & 7))) == 0) {
for (j = ((i * i) << 1) + (i << 1); (j << 1) + 1 <= n; j += (i << 1) + 1) {
p[j >> 3] |= (1 << (j & 7));
}
}
}
prim[2] = 1;
for (i = 1; 2 * i +1<= n; ++i)
if ((p[i >> 3] & (1 << (i & 7))) == 0)
prim[2*i+1] = 1;
long nr = 1;
for( i=2; i<=n; i++ )
nr += 2*tot( i );
freopen( "fractii.out", "wt", stdout );
printf( "%ld\n", nr );
fclose( stdout );
return 0;
}