Cod sursa(job #176402)

Utilizator Andreid91Ciocan Andrei Andreid91 Data 11 aprilie 2008 10:54:17
Problema Pascal Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<fstream.h>
#include<math.h>

int calcexp(int d, int n)
	{
	int nr=0;int p=0;
	while (pow(d,++p)<=n)
		nr+=n/(int)pow(d,p);
	return nr;
	}

int calc(int d, int a)
	{
	int nr=0;
	for (d;a%d==0;nr++,d*=d);
	return nr;
	}

int main()
{
int r,k,i,nr=0,k1,p,p1;
int j,d;
ifstream f("pascal.in");
f>>r>>d;
f.close();
if (d==2 || d==3|| d==5) k=calcexp(d,r);
	else if (d==4) k=calcexp(2,r);
		else {
		     k=calcexp(2,r);
		     k1=calcexp(3,r);
		     }
p=k;p1=k1;
for (i=1;i<=r/2;i++)
	if (d==2|| d==3|| d==5) { p=p-calc(d,r-i+1)+calc(d,i);
				  if (k-p>0) nr++;}
			else if (d==4) {
				       p=p-calc(2,r-i+1)+calc(2,i);
				       if (k-p>1) nr++;
				       }
				else   {
				       p=p-calc(2,r-i+1)+calc(2,i);
				       p1=p1-calc(3,r-i+1)+calc(3,r);
				       if ((k-p) && (k1-p1)) nr++;
				       }
if (r%2==0) {
	    nr=2*nr;
	    if (d==2 || d==3 || d==5 ) {
				       p=2*calcexp(d,r/2);
				       if (k-p) nr--;
				       }
		else if (d==4) {
			       p=2*calcexp(2,r/2);
			       if (k-p>1) nr++;
			       }
			  else {
			       p=calcexp(2,r/2);
			       p1=calcexp(3,r/2);
			       if ((k-p) && (k1-p1)) nr--;
			       }
	    }
	else nr*=2;
ofstream g("pascal.out");
g<<nr;g.close();
return 0;
}