Cod sursa(job #293346)

Utilizator vlad_olteanVladimir Oltean vlad_oltean Data 1 aprilie 2009 16:58:38
Problema Fractii Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
#define N 1000000

int p[N],nr,div;
bool scos[N];
int n,sum,x;

int main()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);
	scanf("%d",&n);
	
	sum=n;
	for(int i=2;i<=n;i++)
	{	x=i; div=1;
		for(int j=2;j<=x;j++)
			if(x%j==0)
			{	p[0]++;
				while(x%j==0)
				{	p[p[0]]++;
					x/=j;
				}
			}
		for(int j=1;j<=p[0];j++)
		{	div*=(p[j]+1);
			p[j]=0;
		}
		div-=2;
		sum+= (n-1 - 2*div);
		x=i-2-div;
		if(!scos[i]&&x)
			for(int j=2*i;j<=n;j+=i)
			{	scos[j]=1;
				sum-=2*x;
				//printf("Am scos %d de pe nivelul %d\n",2*x,j);
			}
		//printf("Dupa nivelul %d mai sunt %d fractii, iar div = %d, x = %d\n",i,n-1-2*div,div,x);
		p[0]=0;
	}
	printf("%d",sum);
	return 0;
}