Cod sursa(job #469688)

Utilizator cahemanCasian Patrascanu caheman Data 8 iulie 2010 16:55:29
Problema GFact Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include<stdio.h>
#include<math.h>
#define LL long long
long long min=0;
long long q;
LL multi(LL p,LL n) 
{ 
LL num=p,s=0; 
while(n)     
{ 
s+=n/num; 
n=n/num;     
} 
return s; 
} 
long long bin(long long d,long long e)
{
long long m,pozdy=0,st,dr;	
st=1;
dr=(long long)(1ll<<61)-1;
while(st<=dr)
	{
	m=(st+dr)>>1;
	if(mult(m,d)>=e)
		{
		dr=m-1;
		pozdy=m;
		}
	else
		st=m+1;
	}
return pozdy;
}
void desc(long long p)
{ 
long long d=2,e,f,a;	
    e=sqrt(p);
	while(d<=e&&p>1)
	{
	f=0;
		while(p%d==0)
		{
		f++;
		p=p/d;
		}
	if(f)	
		{
		a=bin(d,f*q);
		if(a>min)
			min=a;
		}
	d++;
	}
if(p>1)
	{
	a=bin(d,f*q);
	if(a>min)
		min=a;
	}
}
int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	long long p;
	scanf("%lld%lld",&p,&q);
	desc(p);
	printf("%lld",min);
	return 0;
}