Cod sursa(job #373495)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 13 decembrie 2009 22:15:36
Problema Mins Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <cstring>

#define file_in "mins.in"
#define file_out "mins.out"

int a,b,min,max,res;
int prim[20010],t[21010][20],nrp[20010];

inline int cmmdc(int a, int b)
{
	int r;
	while(b)
	{
		r=a%b;
		a=b;
		b=r;
	}
	
	return a;
	
}

int count(int x)
{
	int nr,i;
	
	nr=x;
    for (i=1;i<=nrp[x];++i) 
		nr=(nr/t[x][i])*(t[x][i]-1);
    return nr;
}


int main()
{
	int i,j;
	freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);
	
	scanf("%d %d", &a, &b);
	a--;b--;
	if (a>b) 
	{ 
		max=a;
	    min=b;
	}
	else 
	{
		min=a;
		max=b;
	}
	
	memset(prim,0,sizeof(prim));   
	nrp[1]=1;
    t[1][1]=1;
	
	for (i=2;i<=min;++i)
		 if (!prim[i])
		 {
			 for (j=i*2;j<=min;j+=i)
				   prim[j]=1;
			 t[j][++nrp[j]]=i;
		 }
	
	for (i=2;i<=min;++i)
		 res+=count(i);
	
	res*=2; 
	res+=(max-min);
	for (i=min+1;i<=max;++i)
		 for (j=2;j<=min;++j)
			  if (cmmdc(i,j)==1)
				  res++;
	
	printf("%d", res+1);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}