Cod sursa(job #82431)

Utilizator mordredSimionescu Andrei mordred Data 6 septembrie 2007 21:36:28
Problema Fractii Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
#include<stdlib.h>

static long my_gcd(long a, long b)
{
	long q,r,t;

	if((a == 0)||(b == 0)) return -1;
	if(a < 0) a = -a;
	if(b < 0) b = -b;
	if(b < a){
		t = b;
		b = a;
		a = t;
	}
	
	q = b/a;
	r = b - a*q;
	if(r == 0)
		return a;

	return my_gcd(a,r);
}


static long phiphi(long,long);
static long phi(long n)
{
	if(n<0)n=-n;
	
	if(n<=1)return 0;
	if(n==2)return 1;
	if(n==3)return 2;
	return phiphi(n,2);
}


static long phiphi(long y, long x)
{
	long z;

	if(x+1 == y)return x; 
	if((y%x)==0){
		if(my_gcd(x,z=y/x)==1)
			return phi(x)*phi(z); 
		else
			return x*phi(z); 
					   
	}
	else return phiphi(y,x+1);
}

int main()
{
	long i,j,n,nr=1;
	freopen("fractii.in","r",stdin);freopen("fractii.out","w",stdout);
	scanf("%ld",&n);
	for(i=1;i<=n;i++)
	   nr+=2*phi(i);
	printf("%ld",nr);
	
	
	

	return 0;

}