Cod sursa(job #263890)

Utilizator mariusdeacuMarius Deacu mariusdeacu Data 20 februarie 2009 22:01:27
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <stdio.h>
int k;
int pnum[79000];
double totem[1000001];
double tot(int x)
{
	for (int i = 0; i < k; i++)
	{
		if (x % pnum[i] == 0)
		{
			int xx = x;
			while (x % pnum[i] == 0)
			{
				x /= pnum[i];
			}
			//res *= (1 - (double)1 / pnum[i]);
			if (x == 1)
				return (pnum[i] - 1) * (xx / pnum[i]);
			else
				return totem[x] * totem[xx / x];
		}
	}
	pnum[k++] = x;
	return x * (1 - (double)1 / x);	
}
int main()
{
	int n;
	k = 0;
	FILE *in = fopen("fractii.in","rt");
	FILE *out = fopen("fractii.out","wt");
	fscanf(in, "%d", &n);
	fclose(in);
	double num = 0;
	totem[1] = 1;
	for (int i = 2; i <=n; i++)
	{
		totem[i] = tot(i);
		//fprintf(out, "totem(%d) = %.0Lf\n", i, totem[i]);
		num += totem[i];
	}
	num = num * 2 + 1;
	fprintf(out, "%.0Lf", num);
	fclose(out);
	return 0;
}