Cod sursa(job #51975)

Utilizator znakeuJurba Andrei znakeu Data 17 aprilie 2007 14:47:32
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.62 kb
#include <stdio.h>
char v[100005];

void ciur(int n)
{
	int i,j;
	v[0]=1;
	v[1]=1;
	for(i=2; i*i<=n; i++)
		for (j=i+i; j<=n; j+=i)
			v[j]=1;
}

int euler(int k)
{
	if (!v[k])
		return k-1;
	else
	{
		int i=2;
		while (k%i!=0 || v[i]!=0)
			i++;
		if (k % (i*i))
			return (i-1)*euler(k/i);
		else
			return i*euler(k/i);	
	}
}


int main()
{
	int n,s=0,i;
	
	FILE *in=fopen("fractii.in","r");
	fscanf(in,"%d",&n);
	fclose(in);
	ciur(n);
	for (i=2; i<=n; i++)
		s+=euler(i);
	s*=2;
	s++;
	
	FILE *out=fopen("fractii.out","w");
	fprintf(out,"%d\n",s);
	fclose(out);
	
	return 0;
}