Cod sursa(job #67244)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 23 iunie 2007 14:54:27
Problema GFact Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.07 kb
#include<stdio.h>
long long int p,q,b,i,pr[45000],e,left,right,mid,eval,e1,j,sol1,sol;
long long int factorizare();
long long int getfact(long long int baza,long long int exponent);
int main()
{
	FILE *f,*g;
	f=fopen("gfact.in","r");
	g=fopen("gfact.out","w");
	fscanf(f,"%lld%lld",&p,&q);
	factorizare();
	fprintf(g,"%lld",sol);
	fcloseall();
	return 0;
}
long long int factorizare()
{  for(i=2;;i++)
	{ if(i*i>p)break;
	   if(!pr[i])
	    { if(p%i==0)
	       { e=0;
		 while(p%i==0){ e++;p/=i;}
		 sol1=getfact(i,e);
		 sol=(sol>sol1)?sol:sol1;
		 for(j=i;;j=j+i)
		  { if(j*j>p)break;
		    pr[j]=1;
		  }
	       }
	    }
	}
	if(p>1)
	sol1=getfact(p,1);
	sol=(sol>sol1)?sol:sol1;
	return 0;
}
long long int getfact(long long int baza,long long int exponent)
{
	long long int left,right,mid,val,exp1;
	left=0,right=baza*exponent;
	while(right>left+1)
	{
		mid=(left+right)/2;
		val=baza*mid;
		exp1=0;
		while(val)
		{ exp1+=val/baza;
		  val/=baza;
		}
		if(exp1<exponent)
		 left=mid;
		 else
		 right=mid;
	}
	return right*baza;
}