Pagini recente » Cod sursa (job #135461) | Istoria paginii runda/simulare_oji_2023_clasa_9_16_martie/clasament | Cod sursa (job #2945671) | Cod sursa (job #607790) | Cod sursa (job #2088110)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int dp[20], e[20], ndp, q;
void divp(int n){
int p, d=2;
while(d*d<=n){
if(n%d==0){
dp[++ndp]=d;
p=0;
while(n%d==0){
n/=d;
p++;
}
e[++ndp]=p;
}
d++;
}
if(n!=1){
dp[++ndp]=n;
e[ndp]=1;
}
}
long long putere(long long n, int p){
long long nr=0;
while(n>=p){
nr+=n/p;
n/=p;
}
return nr;
}
bool sedivide(long long n){
for(int i=1; i<=ndp; i++){
if(putere(n, dp[i])<e[i]*q){
return false;
}
}
return true;
}
int main()
{
long long p, r=0, pas=1LL<<45;
in>>p>>q;
divp(p);
while(pas!=0){
if(!sedivide(r+pas))
r+=pas;
pas/=2;
}
r++;
out<<r;
return 0;
}