Pagini recente » Cod sursa (job #1125050) | Cod sursa (job #1680578) | Cod sursa (job #2942052) | Cod sursa (job #3031049) | Cod sursa (job #1123266)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX_COUNT 500000
FILE *in, *out;
long primes[MAX_COUNT];
long count = 0;
long init_sum = 1;
long calculate_totient(long n)
{
long sqrt_n = n/2 + 1;
long i = 0;
long p_product = 1;
int found = 0;
while(primes[i] < sqrt_n && i<count)
{
if(n % primes[i] == 0)
{
p_product *= (primes[i] - 1);
n = n / primes[i];
found = 1;
}
i++;
}
if(!found) // the number is prime
{
primes[count++] = n;
return n-1;
}
return (long)(p_product * n );
}
long calculate_fractions(long n)
{
long i = 1;
if(n==1)
return init_sum;
while(i<n)
{
init_sum += calculate_totient(i+1)<<1;
i++;
}
return init_sum;
}
int main()
{
long result,n ;
in = fopen("fractii.in","r");
fscanf(in,"%ld",&n);
fclose(in);
result = calculate_fractions(n);
out = fopen("fractii.out","w");
fprintf(out,"%ld",result);
fclose(out);
return 0;
}