Cod sursa(job #5521)

Utilizator figure0907Andrei Gonczi figure0907 Data 12 ianuarie 2007 22:12:07
Problema Fractii Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <stdio.h>
#include <string.h>

#define maxn 1000001
#define maxp 80000

long n,i,j,len,st[maxp],p[maxp];
char fol[maxn];
float euler[maxn];
long long sol=1;

void readdata()
{
	FILE *f = fopen("fractii.in","rt");
	fscanf(f,"%ld",&n);
	fclose(f);
}

void solve()
{
	memset(fol,1,sizeof(fol));
	for (i=1;i<=n;i++) euler[i]=i;
	len=0;
	i=1;
	while (i<n)
	{
		i++;
		if (fol[i])
		{
			len++;
			st[len]=i;
			euler[i]=i-1;
			j = i;
			while (i+j<=n)
			{
				j+=i;
				fol[j]=0;
				euler[j]=euler[j]*(i-1)/i;
			}
      }
	}
	for (i=2;i<=n;i++)
	{
		sol+=2*(long long)euler[i];
	}
}

void writedata()
{
	FILE *f = fopen("fractii.out","wt");
	fprintf(f,"%lld",sol);
	fclose(f);
}

int main()
{
	readdata();
	solve();
	writedata();

	return 0;
}