Pagini recente » Cod sursa (job #544328) | Cod sursa (job #1643893) | Cod sursa (job #1125310) | Cod sursa (job #2677133) | Cod sursa (job #807051)
Cod sursa(job #807051)
#include<cmath>
#include<fstream>
using namespace std;
ifstream in("gfact.in");
ofstream out("gfact.out");
int prim(long long x){
int i=2,prim=1;
while((prim)&&(i<=sqrt(x))){
if(x%i==0)prim=0;
i++;
}
return prim;
}
int verif(long long n,long long a,long long q){
int i=2,baz[100],exp[100],h=0,e=0,aux;
bool sediv=true;
while(a>1){
if(a%i==0) if(prim(i)==1){
while(a%i==0){
a/=i;
e++;
}
while((e>=exp[h])&&(h>0)) h--;
h++;
baz[h]=i;
exp[h]=e;
e=0;
}
i++;
}
for(i=1;i<=h;i++){
aux=n;
e=0;
while(aux>=baz[i]){
e+=aux/baz[i];
aux /= baz[i];
}
if(e<(exp[i]*q)) sediv=false;
}
if(sediv==true) return 1;
else return 0;
}
long long caut(long long p, long long q){
int i=0, pas = 1 <<30;
while(pas!=0){
if(verif(i+pas,p,q)==0) i+=pas;
pas /=2;
//cout<<pas<<" "<<i<<" "<<p<<" "<<q<<" "<<verif(i+pas,p,q)<<"\n";
}
return 1+i;
}
int main()
{
long long p,q;
in>>p>>q;
out<<caut(p,q)<<"\n";
return 0;
}