Cod sursa(job #373505)

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

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

int a,b,min,max,res;
int prim[10010],t[11010][20],nrp[10010];

inline int count2(int x, int y)
{
	int i;
		for (i=1;i<=nrp[y];++i)
       if (x%t[y][i]==0) return 0;
   return 1;
}

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;

}

inline int maxim(int a, int b) { return a>b?a:b; }
inline int minim(int a, int b) { return a<b?a:b; }

int main()
{
	int i,j;
	freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);
	
	scanf("%d %d", &a, &b);
	a--;b--;
	min=minim(a,b);
	max=maxim(a,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;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 (count2(i,j)==1)
				  res++;
	
	printf("%d", res+1);

		
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}