Cod sursa(job #126861)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 22 ianuarie 2008 21:55:48
Problema GFact Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <stdio.h>
int main()
{ int p,q,d,i,j,max=0,m,l,cd,ok=0,dr,st,c;
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
fscanf(f,"%d%d",&p,&q);
if(p==1) { fprintf(g,"1"); return 0;}
for (d=2;d*d<=p;d++)
	{
	c=0;
	for(c=0;p%d==0;c++,p=p/d);
	if(c!=0) 	
		{
		c=c*q;
		st=1;
		dr=d*c*2;
		while(st<=dr)
			{
			l=0;
			cd=d;
			m=(st+dr)/2;
			while(m/cd)
				{
				l=l+m/cd;
				cd=cd*d;
				}
			if(l==c) 
				{ 
				while(m%d) m--;
				 
				 break; 
				}
			else if(l>c) dr=m-1;
			else st=m+1;
			}
		if(m>max) max=m;
		}
	}
if(p!=1)
	{
	st=1;
	dr=p*q*2;
	ok=0;
	while(st<=dr)
		{
		l=0;
		cd=p;
		m=(st+dr)/2;
		while(m/cd)
			{
			l=l+m/cd;
			cd=cd*p;
			}
		if(l==q) { while(m%p) m--;  break;}
		else if(l>q) dr=m-1;
		else st=m+1;
		}
	if(m>max) max=m;}

fprintf(g,"%d",max);
return 0;
}