Cod sursa(job #345792)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 4 septembrie 2009 19:09:06
Problema Mins Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include<stdio.h>
#include<vector>
#define N 1000000
using namespace std;
int c,d,p,nr,ind;
int x[N+2];
vector <int> v[N+2];

void read()
{
	freopen("mins.in","r",stdin);
	freopen("mins.out","w",stdout);
	scanf("%d%d",&c,&d);
	c--;
	d--;
}

void ciur()
{
	int i,j;
	for(i=2;i<=N;i++)
		if(v[i].size()==0)
		{
			for(j=i;j<=N;j+=i)
			{
				v[j].push_back(i);
			}
		}
}

void back(int k)
{
	if(k==v[ind].size())
	{
		if(nr&1)
			x[ind]-=ind/p;
		else
			x[ind]+=ind/p;
		return;
	}
	back(k+1);
	p=p*v[ind][k+1];
	nr++;
	back(k+1);
	nr--;
	p=p/v[ind][k+1];
}

void rez()
{
	int i,sol=0;
	for(i=1;i<=c;i++)
	{
		if(v[i].size()==0)
			x[i]=d-d/i;
		else
		{
			p=1;
			ind=i;
			nr=0;
			back(1);
		}
		sol+=x[i];
	}
	printf("%d\n",sol);
}

int main()
{
	read();
	ciur();
	rez();
	return 0;
}