Cod sursa(job #2067540)
Utilizator | Data | 16 noiembrie 2017 16:25:47 | |
---|---|---|---|
Problema | GFact | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.67 kb |
#include <bits/stdc++.h>
using namespace std;
long long legendre(long long n, int p) {
long long ans=0;
while (n)
n/=p,ans+=n;
return ans;
}
int main()
{
ifstream cin("gfact.in");
ofstream cout("gfact.out");
int p,q,k,l,i;
cin>>p>>q;
for (i=2;i*i<=p;i++)
if (p%i==0) {
k=i,l=0;
while (p%i==0)
p/=i,l++;
}
if (p>1)
k=p,l=1;
q*=l;
long long st=2,dr=1LL*k*q,ans=dr+1;
while (st<=dr) {
long long mid=(st+dr)>>1;
if (legendre(mid,k)>=q)
ans=mid,dr=mid-1;
else
st=mid+1;
}
cout<<ans<<'\n';
return 0;
}