Cod sursa(job #52207)

Utilizator requiemPop Cristian requiem Data 18 aprilie 2007 08:41:50
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.63 kb
#include<stdio.h>

int prim(int n);
int main()
{
	freopen("fractii.in","r",stdin);
	freopen("fractii.out","w",stdout);

	long n,i,s=0,j,aux;
	scanf("%ld",&n);
	for(i=2;i<=n;++i)
	{
		if(prim(i))
		{
			s+=(i-1)*2;
			continue;
		}
		else
		{
			aux=i;
			if(i%2==0)
			{
				if(4<=i)
					aux-=aux/2;
			}
			for(j=3;j<=i/2;j+=2)
			   if(i%j==0)
					if(prim(j))
						if(2*j<=i)
							aux-=aux/j;

		}
		s+=2*aux;
	}
	printf("%ld",s+1);
	return 0;
}
int prim(int i)
{
	if(i==2||i==3)
		return 1;
	if(i%2==0||i%3==0)
		return 0;
	long j;
	for(j=5;j<=i/2;j+=2)
		if(i%j==0)
			return 0;
	return 1;
}