Cod sursa(job #798931)

Utilizator stanescumalinStanescu Malin Octavian stanescumalin Data 17 octombrie 2012 16:45:35
Problema Pascal Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <iostream>
#include <fstream>
#include <time.h>

using namespace std;

int min(int a, int b)
{
	return a>b?b:a;
}
int max(int a, int b)
{
	return a>b?a:b;
}
int gf(int nr, int d)
{
	int i;
	for(i=0; ((nr%d == 0) && (nr != 0)); i++) nr = nr/d;
	return i;
}

int main()
{
//	clock_t clocky;
//	clocky = clock();
	int r, d;
	int j, a1, a2;
	int x2, x3, x5, cnt, i;
	ifstream fin("pascal.in");
	ofstream fout("pascal.out");
	fin>>r; fin>>d;
	x2 = 0; x3 = 0; x5 = 0; cnt = 0;
//	cout<<clock()-clocky<<"   ";
	for(i=0; i<r/2; i++)
	{
		a1 = r-i;
		a2 = i+1;
		if(d % 2 == 0)
		{
			for(j=0; ((a1%2 == 0) && (a1 != 0)); j++) a1 = a1/2;
			x2 = x2 + j;
			for(j=0; ((a2%2 == 0) && (a2 != 0)); j++) a2 = a2/2;
			x2 = x2 - j;
			if(d == 2) if(x2 > 0) cnt++;
			if(d == 4) if(x2 > 1) cnt++;
		}
		if(d % 3 == 0)
		{
			for(j=0; ((a1%3 == 0) && (a1 != 0)); j++) a1 = a1/3;
			x3 = x3 + j;
			for(j=0; ((a2%3 == 0) && (a2 != 0)); j++) a2 = a2/3;
			x3 = x3 - j;
			if(d == 3) if(x3 > 0) cnt++;
			if(d == 6) if(min(x2, x3) > 0) cnt++;
			continue;
		}
		if(d % 5 == 0)
		{
			for(j=0; ((a1%5 == 0) && (a1 != 0)); j++) a1 = a1/5;
			x5 = x5 + j;
			for(j=0; ((a2%5 == 0) && (a2 != 0)); j++) a2 = a2/5;
			if(d == 5) if(x5 > 0) cnt++;
			continue;
		}
	}
	cnt = cnt*2;
	if(r % 2 == 0)
	{
		x2 = x2 + gf(r-i, 2);
		x3 = x3 + gf(r-i, 3);
		x5 = x5 + gf(r-i, 5);
		x2 = x2 - gf(i+1, 2);
		x3 = x3 - gf(i+1, 3);
		x5 = x5 - gf(i+1, 5);
		if(d == 2) if(x2 > 0) cnt--;
		if(d == 3) if(x3 > 0) cnt--;
		if(d == 4) if(x2 > 1) cnt--;
		if(d == 5) if(x5 > 0) cnt--;
		if(d == 6) if(min(x2, x3) > 0) cnt--;
	}
	fout<<cnt;
//	cout<<clock() - clocky;
//	system("PAUSE");
	return 0;
}