Cod sursa(job #635022)

Utilizator PatrikStepan Patrik Patrik Data 18 noiembrie 2011 10:48:40
Problema Pascal Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
FILE *f, *g;
long long r , nr , nums , numd , rez , aux  , nr2 , nr3 , nums2 , nums3 , numd2 , numd3 , x;
int d;
long div;

void citire();
void solve();
void tipar();

int main()
{
	citire();
	solve();
	tipar();
	return 0;
}

void citire()
{
	f=fopen("pascal.in" , "r");
	fscanf(f , "%lld%d" , &r , &d );
	fclose(f);
}

void solve()
{
	if(d == 6)
	{
		div = 2;
		while(r/div)
		{
			nr2+=r/div;
			div*=2;
		}
		div = 3;
		while(r/div)
		{
			nr3+=r/div;
			div*=3;
		}
		nums3 = nr3;nums2 = nr2;
		x = r+1;
		for( long long j = 1 ; j<=x/2 ; ++j  )
		{
			long long aux = r;
			while(aux%2==0)
			{
				nums2--;
				aux/=2;
			}
			aux = r;
			while(aux % 3==0)
			{
				nums3--;
				aux/=3;
			}
			aux = j;
			while(aux % 2 ==0)
			{
				numd2++;
				aux/=2;
			}
			aux = j;
			while(aux%3 == 3)
			{
				numd3++;
				aux/=3;
			}
			long long d3 = nr3-nums3-numd3,d2=nr2-nums2-numd2;
			if((d3 < d2 && d3)||(d2 < d3&&d2) )
				rez++;
		}
	}
	else
	{
	div = d;
	while(r/div)
	{
		nr+=r/div;
		div*=d;
	}
	nums = nr;
	x = r+1;
	for(long long j = 1 ;j<x/2;++j)
	{
		aux = r;
		while(aux % d==0){
			nums--;
			aux/=d;
		}
		r--;
		aux = j;
		while(aux%d==0)
		{
			numd++;
			aux/=d;
		}
		if(nr-nums-numd > 0)
			rez++;
	}
	}
	if(x%2 == 0)
		rez = rez*2;
	else
		rez=2*rez+1;
	
}

void tipar()
{
	g=fopen("pascal.out" , "w");
	fprintf(g,"%lld" , rez );
	fclose(g);
}