Pagini recente » Cod sursa (job #1207380) | Cod sursa (job #2036606) | Cod sursa (job #2629683) | Cod sursa (job #3278469) | Cod sursa (job #2092491)
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>
#include <stdint.h>
#include <math.h>
typedef unsigned int uint;
uint euler(uint n);
bool is_prime(uint n);
uint phi(uint n);
int main(void)
{
FILE *in = fopen("fractii.in", "r");
FILE *out = fopen("fractii.out", "w");
if(in != NULL && out != NULL)
{
uint n;
uint s = 0;
fscanf(in, "%u", &n);
uint i = 1;
for(; i <= n; i++)
{
s += euler(i);
}
fprintf(out, "%u\n", (2 * s) - 1);
fclose(in);
fclose(out);
}
else
{
printf("Error\n");
}
return 0;
}
bool is_prime(uint n)
{
if((n == 1) || (n % 2 == 0 && n != 2))
{
return false;
}
else
{
uint i = 2;
for(; i * i <= n; i++)
{
if(n % i == 0)
{
return false;
}
}
return true;
}
}
uint euler(uint n)
{
if(is_prime(n))
{
return n - 1;
}
else
{
return phi(n);
}
}
uint phi(uint n)
{
uint c = 1;
uint d = 2;
while(n > 1)
{
uint p = 0;
while(n % d == 0)
{
p++;
n /= d;
}
if(p)
{
c *= (d - 1) * ((uint)pow(d, p - 1));
}
d++;
if(n > 1 && d * d > n)
{
d = n;
}
}
return c;
}