Cod sursa(job #1150992)

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

long long p[100000000];
long long fi[100000000];
long long count;

long long euler(long long k)
{
	if(k<4)
	{
        p[count]=k;
        fi[k]=k-1;
        count++;
        return k-1;
	}
	else
	{
        long long prim=1, aux=k, i=0;
        long double f=k;
        while(i<count && aux>1)
        {
            if(aux%p[i]==0)
            {
                f*=((long double)fi[p[i]])/((long double)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;
	long long N, r=1;
	fi=fopen("fractii.in", "r");
	fo=fopen("fractii.out","w");
	fscanf(fi, "%lld", &N);
	if(N!=1)
		for(long long i=2; i<=N; i++)
        {
			r+=2*euler(i);
            if(r==60786971)
                printf("!Hello!");
        }
    fprintf(fo, "%lld", r);
    fclose(fi);
    fclose(fo);
    return 0;

}