Pagini recente » Cod sursa (job #2948030) | Cod sursa (job #1388621) | Cod sursa (job #1834847) | Cod sursa (job #3253741) | Cod sursa (job #160350)
Cod sursa(job #160350)
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
float *vec;
int *ciur, nciur;
int MAXSIZE = 1000000;
char *p;
void createCiur(int n)
{
long long i, j;
int nr = 1;
for ( i = 3; (i*i) <= n; i += 2 )
{
if (p[i]== 0)
{
for (j = (i * i); j <= n; j += (i << 1))
p[j] = 1;
}
}
nciur = 1;
ciur[0] = 2;
for ( i = 3; i <= n; i += 2 )
if ( p[i] == 0 )
{
ciur[nciur++] = i;
}
}
int prime( int n )
{
for ( int i = 0; ciur[i] * ciur[i] <= n; i++ )
if ( n % ciur[i] == 0 )
return ciur[i];
return 1;
}
int main ( int argc, char *argv[] )
{
p = new char[1000000];
vec = new float[1000000];
ciur = new int[100000];
FILE *fin = fopen( "fractii.in", "r" );
int n;
fscanf( fin, "%d", &n );
fclose( fin );
createCiur( n );
vec[1] = n;
for ( int i = 2; i <= n; i++ )
{
int nr = prime(i);
int pr = i / nr;
if ( nr != 1 && ( ( i / nr ) % nr ) == 0 )
vec[i] = vec[nr];
else
vec[i] = vec[nr] * ( pr - 1 ) / pr;
fprintf( stderr, "%f ", vec[i] );
}
fprintf( stderr, "\n" );
long long rez = 0;
for ( int i = 1; i <= n; i++ )
rez += (int)ceil(vec[i]);
FILE *fout = fopen( "fractii.out", "w" );
fprintf( fout, "%lld\n", rez );
fclose( fout );
delete p;
delete vec;
delete ciur;
return 0;
}