Cod sursa(job #245181)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 16 ianuarie 2009 23:55:35
Problema Pascal Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<iostream.h>
#include<stdio.h>
FILE *f=fopen("pascal.in","r"),*g=fopen("pascal.out","w");
long r,d,prim[6],p,pu[6],nr=0,rez=0,i,j,v[5000001][2],aux2;
int solve()
{
	long putere1,putere2,putere3,i1;
	for(i1=1;i1<=nr;i1++)
	{
		putere1=putere3=putere2=0;
		putere1=r/v[r][i1];
		if(putere1<pu[i1])
			return 0;
		long aux=r-j;
		putere2=aux/v[aux][i1];
		putere3=j/v[j][i1];
		if(putere1-putere2-putere3<pu[i1])
			return 0;
	}
	return 1;
}
int main()
{
	fscanf(f,"%ld %ld",&r,&d);
	for(i=2;i<=d;i++)
	{
		p=0;
		while(!(d%i)) d/=i,p++;
		if(p)
		{
			nr++;
			prim[nr]=i;
			pu[nr]=p;
		}
	}
	for(i=1;i<=nr;i++)
	{
		aux2=-1;
		for(j=prim[i];j<=r;j*=prim[i])
		{
			for(long i2=aux2+1;i2<=j;i2++)
				v[i2][i]=j;
			aux2=j;
		}
	}
	long aux=r/2; 
	for(j=0;j<=aux;j++)
		if(solve())
			if(r%2==0)
				if(j==aux)
					rez++;
				else
					rez+=2;
			else
				rez+=2;
	fprintf(g,"%ld\n",rez);
	return 0;
}