Cod sursa(job #575559)

Utilizator SmarandaMaria Pandele Smaranda Data 8 aprilie 2011 15:27:18
Problema Mins Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
long p[5001];
long f[5001][7];
void phi (long n)
{
	long i,j;
	for (i=1;i<=n;i++)
		p[i]=i;
	for (i=2;i<=n;i++)
		if (p[i]==i)
		{
			p[i]=i-1;
			for (j=i+i;j<=n;j=j+i)
				p[i]=p[i]*(i-1)/i;
		}
}

void prim (long n)
{
	long i,j;
	f[1][0]=1;
	f[1][1]=1;
	for (i=2;i<=n;i++)
		if (f[i][0]==0)
		{
			f[i][0]=1;
			f[i][1]=i;
			for (j=i+i;j<=n;j=j+i)
				f[j][++f[j][0]]=i;
		}
}

long mins (long x , long y)
{
	long i,j,ok=1;
	for (i=1,j=1;i<=f[x][0] && j<=f[y][0] && ok;i++,j++)
		if (f[x][i]==f[y][i])
			ok=0;
	return ok;
}

int main()
{
	long c,d,minc=-1,mind=-1,num=0,max,i,j;
	
	freopen("mins.in","r",stdin);
	freopen("mins.out","w",stdout);
	
	scanf("%ld%ld",&c,&d);
	if (c<d)
		minc=mind=c;
	else
		minc=mind=d;
	if (c>d)
		max=c;
	else
		max=d;
	phi(minc);
	num=p[1]+p[minc];
	for (i=2;i<minc;i++)
		num=num+p[i]*2;
	prim(max);
	for (i=minc+1;i<c;i++)
		for (j=1;j<d;j++)
		{
			if (mins(i,j)==1)
				num++;
		}
	printf("%ld\n",num);
	return 0;
}