Cod sursa(job #1302783)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 27 decembrie 2014 12:17:05
Problema GFact Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
using namespace std;
long long p, q, a, i,  st, dr,  pp;
long long b, pt, mid, maxim, x;
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int main(){
	fin>> p >> q;
	a = p;
	for(i = 2; i * i <= p; i++){
		pp = 0;
		while(a % i == 0){
			pp++;
			a /= i;
		}
		pp *= q;
		if(pp != 0){
			st = 1;
			dr = pp;
			while(st <= dr){
				mid = (st + dr) / 2;
				b = mid * i;
				pt = 0;
				x = i;
				while(x <= b){
					pt += b / x;
					x *= i;
				}
				if(pt >= pp){
					dr = mid - 1;
				}
				else{
					st = mid + 1;
				}
			}
			if(st * i> maxim){
				maxim = st * i;
			}
		}
	}
	if(a != 1){
		pp = q;
		st = 1;
		dr = pp;
		while(st <= dr){
			mid = (st + dr) / 2;
			b = mid * i;
			pt = 0;
			x = i;
			while(x <= b){
				pt += b / x;
				x *= i;
			}
			if(pt >= pp){
				dr = mid - 1;
			}
			else{
				st = mid + 1;
			}
		}
		if(st * i> maxim){
			maxim = st * i;
		}
	}
	fout<< maxim;
	return 0;
}