Cod sursa(job #51933)

Utilizator znakeuJurba Andrei znakeu Data 17 aprilie 2007 11:24:40
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb
#include <stdio.h>
char v[1000005];
int v2[1000005];
void ciur(int n)
{
	int i,j;
	v[0]=1; v[1]=1;
	for (i=2; i<n/2+1; i++)
		for (j=2*i; j<=n; j+=i)
			v[j]=1;
}


int main()
{
	int i,j,n,s=0,k;
	long long p;
	
	FILE *in=fopen("fractii.in","r");
	fscanf(in,"%d",&n);
	fclose(in);
	ciur(n);
	
	for (i=2; i<=n; i++)
	{
		if (!v[i])
		{
			v2[i]=i-1;
			s+=v2[i];
		}
		else
		{
			k=i;
			p=1;
			j=2;
			while (k>1)
			{
				if (!v[j])
					if (k%j==0)
					{
						p*=v2[j];
						k/=j;
						while (k%j==0)
						{
							k/=j;
							p*=j;
						}	
					}
				j++;
			}
			s+=p;
		}
	}
	s*=2;
	s++;
	FILE *out=fopen("fractii.out","w");
	fprintf(out,"%d\n",s);
	fclose(out);
	
	return 0;
}