Cod sursa(job #373504)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 13 decembrie 2009 22:34:55
Problema Mins Scor 35
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 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 y)
{
	int nr,i;
	
	if (nrp[x]<nrp[y])
    {
		for (i=1;i<=nrp[x];++i)
       if (y%t[x][i]==0) return 0;
    } 
    else
		for (i=1;i<=nrp[y];++i)
       if (x%t[y][i]==0) return 0;
   return 1;
}

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)
		 for (j=1;j<i;++j)
			 if (j==1) res++;
		 else
			 if (count(i,j)==1) res++;
	
	res*=2; 
	for (i=min+1;i<=max;++i)
		 for (j=1;j<=min;++j)
			 if (j==1) res++;
             else		 
			 if (count2(i,j)==1)
				  res++;
	
	printf("%d", res+1);
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
	
}