Cod sursa(job #754248)

Utilizator purevil95Hobana Matei purevil95 Data 1 iunie 2012 10:37:54
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include<fstream>
using namespace std;
int p,q,nr;
fstream in,out;

struct pereche
{
	int numar;
	int putere;
};

pereche v[100];

bool verificare(long long);
long long putere(long long,int);

long long cautare()
{
	long long pas=1LL<<60,i;
	for(i=0;pas!=0;pas/=2)
		if(!verificare(i+pas))
			i+=pas;
	return i+1;
}

bool verificare(long long x)
{
	for(int i=1 ; i<=nr ; i++)
		if(putere(x,v[i].numar)<v[i].putere)
			return false;
	return true;
}

long long putere(long long x,int p)
{
	long long ct=0;
	while(x>=p)
	{
		ct+=x/p;
		x=x/p;
	}
	return ct;
}

void descompunere(int n)
{
	int i;
	for(i=2;i*i<=n;i++)
		if(n%i==0)
		{
			v[++nr].numar=i;
			v[nr].putere=0;
			while(n%i==0)
			{
				n/=i;
				v[nr].putere++;
			}
			v[nr].putere=v[nr].putere*q;
		}
	if(n!=1)
	{
		v[++nr].numar=n;
		v[nr].putere=q;
	}
	//for(i=1;i<=nr;i++)
		//out<<v[i].numar<<" "<<v[i].putere<<"\n";
}

int main()
{
	in.open("gfact.in",ios::in);
	out.open("gfact.out",ios::out);
	in>>p>>q;
	descompunere(p);
	out<<cautare()<<"\n";
	in.close();
	out.close();
}