Pagini recente » Cod sursa (job #147153) | Cod sursa (job #2911085) | Cod sursa (job #2460717) | Cod sursa (job #2820560) | Cod sursa (job #2067524)
#include <iostream>
#include<cstdio>
using namespace std;
int p,q;
pair <int,int> div[100];
int legendre(long long n,long long d){
int rasp=0;
while(d<=n){
rasp+=(n/=d);
}
return rasp;
}
bool ver(long long n){
long long d;
d=2;
int ind=0;
while(d*d<=p){
ind=0;
while(p>1 && p%d==0){
p/=d;
ind++;
}
if(legendre(n,d)<ind*q)
return false;
}
if(p>1)
if(legendre(n,p)<q)
return false;
return true;
}
long long cautbin(){
int p2=1<<30;
long long pas=0;
while(p2>0){
if(ver(pas+p2)==false)
pas+=1LL*p2;
p2/=2;
}
return pas+1;
}
int main()
{
FILE*fin,*fout;
fin=fopen("gfact.in","r");
fout=fopen("gfact.out","w");
fscanf(fin,"%d%d",&p,&q);
/*long long d=1,i=0;
int ind;
while(d*d<=p){
ind=0;
while(p%d==0){
p/=d;
ind++;
}
div[i].first=d;
div[i].second=p*q;
i++;
}
if(p>1){
div[i].first=p;
div[i++].second=1;
}*/
fprintf(fout,"%lld",cautbin());
return 0;
}