Cod sursa(job #378743)

Utilizator klamathixMihai Calancea klamathix Data 29 decembrie 2009 14:06:25
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<cstdio>
#define VAL 1000000000000000LL
#define ll long long

ll int i , j  , k , n , m , p , q , maxs;

bool ok ( ll int x , ll int fact , ll int pows ) {
	ll int i , result = 0;
	for( i = fact ; i <= x ; i *= fact )
		result += x / i;
if ( result >= pows ) return true;
return false;
}

ll int check ( int factor , int power ) 
{
	ll int lf , rt , mid  , last = 0;
	
	for( lf = 1 , rt = VAL ; lf <= rt ; )
	{
		mid = ( lf + rt ) >> 1;
		if ( ok ( mid , factor , power) ) last = mid , rt = mid -1 ;
			else lf = mid + 1;
	}
	
return last;
} 

int main()
{
	freopen("gfact.in","r",stdin);
	freopen("gfact.out","w",stdout);
	
	scanf("%d %d",&p,&q);
	for( i = 2 ; i * i <= p ; ++i )
	{
		if ( p % i == 0 )
		{
			int cnt = 0;
			while ( p % i == 0 ) p /= i , cnt++;
			if ( check ( i , cnt * q ) > maxs ) 
				maxs = check ( i , cnt * q ) ;
		}
	}
	if ( p > 1 )
		if ( check ( p , q ) > maxs ) maxs = check ( p , q ) ;

printf("%lld\n",maxs);
return 0;
}