Cod sursa(job #1150972)

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

int p[1000000];
int fi[1000000];
int count;

int euler(int k)
{
	if(k<4)
	{
        p[count]=k;
        fi[k]=k-1;
        count++;
        return k-1;
	}
	else
	{
        int prim=1, aux=k, i=0;
        float f=k;
        while(i<count && aux>1)
        {
            if(aux%p[i]==0)
            {
                f*=((float)fi[p[i]])/((float)p[i]);
                while(aux%p[i]==0) aux/=p[i];
                prim=0;
            }
            i++;
        }
        if(!prim)
        {
            fi[k]=ceil(f);
            return fi[k];
        }
        else
        {
            p[count]=k;
            fi[k]=k-1;
            count++;
            return k-1;
        }
    }
}

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);
    fclose(fi);
    fclose(fo);
    return 0;
}