Cod sursa(job #518713)

Utilizator ms-ninjacristescu liviu ms-ninja Data 2 ianuarie 2011 20:47:28
Problema GFact Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <fstream>
#include <bitset>
using namespace std;
#define dim 44722
#define mod 44722
int q[mod],c[mod],d[mod];
bitset<dim> v;
int main()
{
	ifstream fin("gfact.in");
	ofstream fout("gfact.out");
	int n,  f, im, i, j;
	fin>>n >>im;
	f=2;
	q[1]=2;
	for(i=2;i<mod;++i)
	{
		++i;
		
		if(v[i]==0)
		{
			q[f]=i;
			++f;
			for(j=i;j<=mod/i;++j)
			{
				v[i*j]=1;
				++j;
			}
		}
	}
	
	
	i=1;
	long long aux=n;
	int	nr=0;
	while(q[i]*q[i]<=aux && n>1)
	{
		if(n%q[i]==0)
		{
			c[nr]=q[i];
			
			while(n%q[i]==0)
			{
				++d[nr];
				n/=q[i];
			}
			d[nr]*=im;
			++nr;
		}
		++i;	
	}
	
	if(n!=1)
	{
			c[nr]=n;
			d[nr]=im;
			++nr;
		
	}
	
	--nr;
	long long maxim=0;
	for(i=0;i<=nr;++i)
	{
		aux=c[i];
		long long numar=0;
		
		do
		{
			numar=0;
			long long aux1=aux;
			
			while(aux1>1)
			{
				numar+=aux1/c[i];
				aux1/=c[i];
			}
			aux+=c[i];
			
		}while(numar<d[i]);
		
		
		if(maxim<aux-c[i])
			maxim=aux-c[i];
		
	}
		fout<<maxim;
	return 0;
}