Cod sursa(job #126823)

Utilizator ciprianfFarcasanu Alexandru Ciprian ciprianf Data 22 ianuarie 2008 21:16:21
Problema GFact Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 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);
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;
		ok=0;
		dr=d*c;
		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--;
				if(m>max) max=m; 
				ok=1; break; 
				}
			else if(l>c) dr=m-1;
			else st=m+1;
			}
		if(ok==0 && st>max) max=st;
		}
	}
if(p!=1)
	{
	st=1;
	dr=p*q;
	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--; if(m>max) max=m; ok=1; break;}
		else if(l>q) dr=m-1;
		else st=m+1;
		}
	}
if(ok==0 && st>max) max=st;
fprintf(g,"%d",max);
}