Pagini recente » Profil reidan | Cod sursa (job #974964)
Cod sursa(job #974964)
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int* sieve(int n)
{
int *s = calloc((n + 2), sizeof(int));
int i,j;
for (i = 2; i <= sqrt(n); i++)
for (j = i * i; j <= n; j += i)
s[j] = 1;
return s;
}
int indicator(int* s, int ind)
{
int i;
int nr = ind;
for (i = 2; i <= ind; i++)
if (!s[i] && ind % i == 0)
{
nr = nr / i;
nr *= (i - 1);
}
return nr;
}
int main()
{
FILE *f = fopen("fractii.in", "r");
FILE *g = fopen("fractii.out", "w");
int n;
fscanf(f, "%d", &n);
int *s = sieve(n);
int i;
int suma = 1;
for (i = 2; i <= n; i ++) {
suma += indicator(s, i) * 2;
}
fprintf(g,"%d\n", suma);
fclose(f);
fclose(g);
free(s);
return 0;
}