Cod sursa(job #3134688)

Utilizator Ilie_MityIlie Dumitru Ilie_Mity Data 30 mai 2023 12:57:06
Problema GFact Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.86 kb
//Ilie Dumitru
#include<cstdio>
#include<map>

std::map<int, int> mp;

void factorizare(int x)
{
	int i;

	while(!(x&1))
	{
		++mp[2];
		x>>=1;
	}
	for(i=3;i*i<=x;i+=2)
		while(x%i==0)
		{
			x/=i;
			++mp[i];
		}
	if(x>1)
		++mp[x];
}

int cntMult(int x, int baza)
{
	int c=0;
	do c+=(x/=baza); while(x);
	return c;
}

int binara(int baza, int exp)
{
	int l=0, r=baza*exp, mid;
	do
	{
		mid=l+((r-l)>>1);
		if(cntMult(mid, baza)<exp)
			l=mid;
		else
			r=mid;
	}while(r-l>1);
	return r;
}

int main()
{
	FILE* f=fopen("gfact.in", "r"), *g=fopen("gfact.out", "w");
	//FILE* f=stdin, *g=stdout;
	int P, Q, max;

	fscanf(f, "%d%d", &P, &Q);
	factorizare(P);
	max=0;
	for(auto& pr : mp)
	{
		P=binara(pr.first, pr.second*Q);
		if(P>max)
			max=P;
	}
	fprintf(g, "%d\n", max);

	fclose(f);
	fclose(g);
	return 0;
}