Cod sursa(job #12324)

Utilizator Ady.hAdrian Hada Ady.h Data 3 februarie 2007 15:58:58
Problema Fractii Scor 30
Compilator c Status done
Runda Arhiva de probleme Marime 0.91 kb
#include <stdio.h>
#include <math.h>

int vec[1000],n,l=0;

int prim(int x)
{
if (x==2) return 1;
if (x%2==0) return 0;
int i,rad=sqrt(x);
for (i=3;i<=rad;i+=2)
	if (x%i==0) return 0;
return 1;
}

void vector()
{
int i,rad;
rad=sqrt(n);
for (i=2;i<=rad;i++)
	if (prim(i)) {
			vec[l]=i;
			l++;
			}
}

int primmare(int x)
{
int i;
for (i=0;i<l;i++)
	{
	if (x==vec[i]) return 1;
	if (x%vec[i]==0) return 0;
	}
return 1;
}

int totent(int x)
{
int i,fi;
fi=x;
for (i=2;i<=x/2;i++)
	if (x%i==0){
		if (primmare(i)) fi=fi*(i-1)/i;
			}
if (fi==x) return (x-1);
	else return fi;  
}

int main()
{
unsigned long long numar;
int i;
FILE *pf;
pf=fopen("fractii.in","r");
fscanf(pf,"%d",&n);
fclose(pf);
vector();
numar=1;
for (i=2;i<=n;i++){
	numar+=(unsigned long long)(2*totent(i));
		}
pf=fopen("fractii.out","w");
fprintf(pf,"%llu",numar);
fclose(pf);
return 0;
}