Cod sursa(job #721656)

Utilizator CrescentselectJicol Crescent Crescentselect Data 23 martie 2012 22:51:03
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <iostream>
#include <string.h>
#include <math.h>
#include <fstream>
using namespace std;

int fact[64], exponent[64], nr_div;

bool corect(long long h) 
{
	int i;
	for (i=0;i<nr_div;++i) 
	{
    	long long a = h, e = 0;
     	while (a >= fact[i])
	 	{
       		 a /= fact[i];
       		 e += a;
     	}
     	if (e < exponent[i]) 
	 	{
       	  	return false;
     	}
  	}
   	return true;
}

int main() 
{
	ifstream f("gfact.in");
	ofstream g("gfact.out");

	int p, q;
	f>>p>>q;
	for (int i = 2; i * i <= p; ++i)
  		if (!(p % i)) 
		{
			fact[nr_div] = i;
			for ( ;!(p % i); 
			exponent[nr_div] += q) 
		  	p /= i;
			++nr_div;
    	}
  	if (p > 1) {
    	fact[nr_div] = p;
    	exponent[nr_div] = q;
    	++nr_div;
  	}

  	long long start = 1, end = 2000000000ll * 30000ll, mijloc;
  	while(1) 
  	{
    	mijloc = (start + end) / 2;
    	if (!corect(mijloc)) 
		{ 
			start = mijloc + 1; 
			continue; 
		}
    	if (!corect(mijloc - 1)) 
			break;
    	end = mijloc - 1;
    }
	g<<mijloc;	
	f.close();
	g.close();
	return 0;
}