Cod sursa(job #485845)

Utilizator DuxarFII-Stefan-Negrus Duxar Data 19 septembrie 2010 18:16:33
Problema Pascal Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include<fstream>

using namespace std;

struct rec
{
	short int p2,p3,p5;
} a[5000002];

int r,d;
int p2d,p3d,nr,p5d;

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

void factr();
void factd();
void num();

int main()
{
	f>>r>>d;
	
	factr();
	factd();
	
	num();
	
	g<<nr;
	
	f.close();
	g.close();
}

void num()
{
	int pp2,pp3,pp5,mij=r/2,k;
	for (k=1;k<=r;++k)
	{
		pp2=a[r].p2-(a[k].p2+a[r-k].p2);
		pp3=a[r].p3-(a[k].p3+a[r-k].p3);
		pp5=a[r].p5-(a[k].p5+a[r-k].p5);
		if (pp2>=p2d&&pp3>=p3d&&pp5>=p5d) ++nr;
	
	}
	//nr*=2;
	//if (r%2==0) nr--;
}

void factd()
{
	while (d%2==0)
	{
		++p2d;
		d/=2;
	}
	while (d%3==0)
	{
		++p3d;
		d/=3;
	}
	while (d%5==0)
	{
		++p5d;
		d/=5;
	}
}

void factr()
{
	int i,x;
	for (i=2;i<=r;++i)
	{
		a[i].p2=a[i-1].p2;
		a[i].p3=a[i-1].p3;
		a[i].p5=a[i-1].p5;
		x=i;
		while (x%2==0)
		{
			++a[i].p2;
			x/=2;
		}
		while (x%3==0)
		{
			++a[i].p3;
			x/=3;
		}
		while (x%5==0)
		{
			++a[i].p5;
			x/=5;
		}
	}
}