Cod sursa(job #1234896)
Utilizator | Nohai Claudiu NohaiClaudiu | Data | 28 septembrie 2014 12:03:35 |
---|---|---|---|
Problema | Frac | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 0.71 kb |
#include <fstream>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");
long long n,p,i,R,lo,mi,hi,v[2000],lg,j,sol;
int main()
{
fin>>n>>p;
v[1]=1;lg=1;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
while(n%i==0)n/=i;
for(j=1;j<=lg;j++)
v[j+lg]=-v[j]*i;
lg*=2;
}
}
if(n>1)
{
for(j=1;j<=lg;j++)
v[j+lg]=-v[j]*n;
lg*=2;
}
R=1LL;R<<=61;
for(lo=0,hi=R;hi-lo>1;)
{
mi=(lo+hi)/2;
for(sol=0,i=1;i<=lg;i++)
sol+=mi/v[i];
if(sol<p)lo=mi;
else hi=mi;
}
fout<<hi;
return 0;
}