Cod sursa(job #548151)

Utilizator HoriaClementHoriaC HoriaClement Data 7 martie 2011 09:34:43
Problema Pascal Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <fstream>

using namespace std;

int n,d;

ifstream in("pascal.in");
ofstream out("pascal.out");

int fact(int n,int x)
{
	int nr=0;
	while(n%x==0)
	{
		++nr;
		n/=x;
	}
	return -nr;
}
int f2()
{
	int i,partial=0,nr=0;
	for(i=1;i<=(n-1)/2;++i)
	{
		partial+=fact(i,2)-fact(n-i+1,2);
		nr+=(partial>0);
	}
	nr<<=1;
	if(n%2==0)
	{
		partial+=fact(i,2)-fact(n-i+1,2);
		nr+=(partial>0);
	}
	return nr;
}

int f3()
{
	int i,partial=0,nr=0;
	for(i=1;i<=(n-1)/2;++i)
	{
		partial+=fact(i,3)-fact(n-i+1,3);
		nr+=(partial>0);
	}
	nr<<=1;
	if(n%2==0)
	{
		partial+=fact(i,3)-fact(n-i+1,3);
		nr+=(partial>0);
	}
	return nr;
}

int f4()
{
	int i,partial=0,nr=0;
	for(i=1;i<=(n-1)/2;++i)
	{
		partial+=fact(i,2)-fact(n-i+1,2);
		nr+=(partial>1);
	}
	nr<<=1;
	if(n%2==0)
	{
		partial+=fact(i,2)-fact(n-i+1,2)>1;
		nr+=(partial>1);
	}
	return nr;
}
int f5()
{
	int i,partial=0,nr=0;
	for(i=1;i<=(n-1)/2;++i)
	{
		partial+=fact(i,5)-fact(n-i+1,5);
		nr+=(partial>0);
	}
	nr<<=1;
	if(n%2==0)
	{
		partial+=fact(i,5)-fact(n-i+1,5);
		nr+=(partial>0);
	}
	return nr;
}
int f6()
{
	int i,partial1=0,partial2=0,nr=0;
	for(i=1;i<=(n-1)/2;++i)
	{
		partial1+=fact(i,2)-fact(n-i+1,2)>0;
		partial2+=fact(i,3)-fact(n-i+1,3)>0;
		nr+=(partial1>0);
		nr+=(partial2>0);
	}
	nr<<=1;
	if(n%2==0)
	{
		partial1+=fact(i,2)-fact(n-i+1,2);
		partial2+=fact(i,3)-fact(n-i+1,3);
		nr+=(partial1>0);
		nr+=(partial2>0);
	}
	return nr;
}
void work()
{
	in>>n>>d;
	if(d==2)
		out<<f2();
	if(d==3)
		out<<f3();
	if(d==4)
		out<<f4();
	if(d==5)
		out<<f5();
	if(d==6)
		out<<f6();
}

int main()
{
	work();
	return 0;
}