Cod sursa(job #70215)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 5 iulie 2007 08:43:22
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<stdio.h>
long long int p,q,i,j,t[15],b[15],sol1,sol,l,r,m,mm,pp;
long long int gf(long long int tt,long long int bb);
int main()
{
	FILE *f,*g;
	f=fopen("gfact.in","r");
	g=fopen("gfact.out","w");
	fscanf(f,"%lld%lld",&p,&q);
	for(i=2;;i++)
	{ if(i*i>p)break;
	   if(p%i==0)
	    {
	       j++;t[j]=i;
	       while(p%i==0){ b[j]++;p/=i;}
	    }
	}
	if(p>1)
	{j++;t[j]=p;b[j]=1;}
	for(i=1;i<=j;i++)
	b[i]*=q;
	for(i=1;i<=j;i++)
	{
		sol1=gf(t[i],b[i]);
		sol=(sol>sol1)?sol:sol1;
	}
	fprintf(g,"%lld",sol);
	fcloseall();
	return 0;
}
long long int gf(long long int tt,long long int bb)
{
	l=1;r=bb*tt;
	while(r>l+1)
	{
		m=(l+r)/2;
		mm=m;
		pp=0;
		while(mm)
		{ pp+=mm/tt;
		  mm/=tt;
		}
		if(pp>=bb)r=m;
		else l=m;
	}
	return r;
}