Cod sursa(job #754270)

Utilizator GrimpowRadu Andrei Grimpow Data 1 iunie 2012 12:02:50
Problema GFact Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include<iostream>
#include<fstream>
using namespace std;

long long p,q,d[30],pu[30],nr;
void fact(long long a);
bool div(long long a);
ifstream aa("gfact.in");
ofstream ss("gfact.out");
int main() {
	long long i,pas;
	aa >> p >> q;
	fact(p);	
	pas=(long long)1<<60;
	for (i=0;pas!=0;pas>>=1) {
		if (!div(i+pas)) i+=pas;
	}
	ss << i+1;
	return 0;
}

bool div(long long a) {
	long long nr2,i,s;
	for (i=1;i<=nr;++i) {
		nr2=0; s=a;
		while (s>0)	{
			nr2+=s/d[i];
			s/=d[i];
			if (nr2>=pu[i]) break;
		}
		if (!(nr2>=pu[i])) return false;
	}
	return true;
}

void fact(long long a) {
	long long i;
	for (i=2;i*i<=a;++i) {
		if (a%i==0) {
				d[++nr]=i;
				pu[nr]=0;
				while (a%i==0) {
					a/=i;
					pu[nr]+=q;
				}
		}
	}
	if (a!=1) {
		d[++nr]=a;
		pu[nr]=q;
	}
}