Cod sursa(job #1123021)
Utilizator | Data | 25 februarie 2014 22:02:36 | |
---|---|---|---|
Problema | GFact | Scor | 95 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.18 kb |
#include <fstream>
using namespace std;
long long p,q,sol,pt,st,dr,i,j,mid,s;
bool ok;
int main() {
ifstream f("gfact.in");
ofstream g("gfact.out");
f>>p>>q;
if(p==1) {
g<<"1\n";
return 0;
}
for(i=2;1LL*i*i<=p;i++) {
pt=0;
ok=0;
if(p%i==0)
ok=1;
while (p%i==0) {
pt++;
p/=i;
}
st=0;
dr=(1LL<<50);
if(ok)
while(st<=dr) {
s=0;
mid=(st+dr)/2;
for (j=i;j<=mid;j=1LL*j*i)
s+=mid/j;
if (s<pt*q*1LL)
st=mid+1;
else
dr=mid-1;
}
if (sol<st)
sol=st;
}
if(p!=1) {
st=0;
dr=(1LL<<50);
while(st<=dr) {
s=0;
mid=(st+dr)/2;
for (j=p;j<=mid;j=j*i*1LL)
s+=mid/j;
if (s<q)
st=mid+1;
else
dr=mid-1;
}
if (sol<st)
sol=st;
}
g<<sol<<"\n";
return 0;
}