Cod sursa(job #1150823)

Utilizator accxelAlex Carp accxel Data 23 martie 2014 16:17:09
Problema Fractii Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.81 kb
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int p[256];

int prim(int k)
{
	for(int i=2; i<=sqrt(k); i++)
		if(!(k%i))
			return 0;
	return 1;
}
int primes(int k)
{
	int count=0, lim=k;
	for(int i=2; i<=lim; i++)
		if((!(k%i)) && prim(i))
        {
            p[count]=i;
            count++;
            lim/=i;
        }

    return count;
}

int euler(int k)
{
    if(prim(k))
        return k-1;
    else
    {
        float f=k;
        int noPrimes=primes(k);
        for(int i=0; i<noPrimes; i++)
            f*=(1-(1/(float)p[i]));
        return ceil(f);
    }
}

int main()
{
	FILE *fi, *fo;
	int N, r=1;
	fi=fopen("fractii.in", "r");
	fo=fopen("fractii.out","w");
	fscanf(fi, "%d", &N);
    if(N!=1)
        for(int i=2; i<=N; i++)
            r+=2*euler(i);
	fprintf(fo, "%d", r);
    return 0;
}