Cod sursa(job #63912)

Utilizator FlorianFlorian Marcu Florian Data 31 mai 2007 15:11:27
Problema GFact Scor 95
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.83 kb
#include<stdio.h>
#include<values.h>
int main()
{
long long unsigned p,q,a,sol,j,nr,r,k=2,x,max=0,pr,i,m;
FILE*f=fopen("gfact.in","r");
FILE*g=fopen("gfact.out","w");
fscanf(f,"%llu %llu",&p,&q);
for(k=2;k*k<=p;++k)
	{
	r=0;
	while(p%k==0) {++r; p/=k;}
	if(r!=0)
		{
		r=r*q;
		i=0; j=r*k;
		while(i<=j)
			{
			m=(i+j)/2;
			nr=0; pr=k;
			while((m/pr)!=0) { nr+=(m/pr); pr*=k; }
			if(nr==r)
				{
				while(m%k!=0) m--;
				break;
				}
			else if(nr>r) j=m-1;
			else i=m+1;
			}
		if(m>max) max=m;
		}
	}
if(p>1)
	{k=p;  r=q;
		i=0; j=r*k;
		while(i<=j)
			{
			m=(i+j)/2;
			nr=0; pr=k;
			while((m/pr)!=0) { nr+=(m/pr); pr*=k; }
			if(nr==r)
				{
				while(m%k!=0) m--;
				break;
				}
			else if(nr>r) j=m-1;
			else i=m+1;
			}
		if(m>max) max=m;
	}
fprintf(g,"%llu",max);
return 0;
}