Pagini recente » Cod sursa (job #3236249) | Cod sursa (job #946967) | Cod sursa (job #1136421) | Cod sursa (job #698482) | Cod sursa (job #998055)
Cod sursa(job #998055)
#include <fstream>
#include <algorithm>
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <vector>
#include <queue>
using namespace std;
//////////// GLOBALS ////////////
vector<int> base, exponent;
/////////// FUNCTIONS ///////////
inline void compute_prime_factors(int n) {
for(int i = 2; i * i <= n; i++) {
if(n % i == 0) {
base.push_back(i);
int e = 0;
while(n % i == 0) {
n /= i;
e++;
}
exponent.push_back(e);
}
}
if(n > 1) {
base.push_back(n);
exponent.push_back(1);
}
}
long long find_exponent(int val, int b) {
long long res = 0;
while(val / b > 0 ) {
res += val / b;
val /= b;
}
return res;
}
long long find_min_factor(int b, int e) {
long long value = 1;
while(find_exponent(value, b) < e)
value *= 2;
value /= 2;
long long result = value;
while(value) {
if(find_exponent(value + result, b) < e)
result += value;
value /= 2;
}
return result + 1;
}
///////////// MAIN /////////////
int main() {
ifstream fin("gfact.in");
ofstream fout("gfact.out");
int p, q;
// Read
fin >> p >> q;
// Compute
compute_prime_factors(p);
long long solution = 0;
for(int i = 0; i < base.size(); i++)
solution = max(solution, find_min_factor(base.at(i), exponent.at(i) * q));
// Print
fout << solution;
}