Cod sursa(job #3260313)

Utilizator dianatheadiana thea udristoiu dianathea Data 1 decembrie 2024 16:19:42
Problema Frac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <iostream>
#include <climits>
#include <fstream>
#include <algorithm>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
ifstream fin("frac.in");
ofstream fout("frac.out");


int main()
{
    long long n,p;
    fin>>n>>p;
    long long v[30000];
    v[1]=1;
    long long nr=1;
    long long d=2;
    while(d*d<=n)
    {
        if(n%d==0)
        {
            while(n%d==0)
            {
                n/=d;
            }
            for(long long i=1;i<=nr;i++)
            {
                v[i+nr]=-d*v[i];
            }
            nr*=2;
        }
        d++;
    }
    if(n>1)
    {
         for(long long i=1;i<=nr;i++)
            {
                v[i+nr]=-n*v[i];
            }
            nr*=2;
    }
    long long st=1;
    long long dr=LLONG_MAX /4;
    long long sol;
    while(st<=dr)
    {
        long long m=(st+dr)/2;
        long long s=0;
        for(long long i=1;i<=nr;i++)
        {
            s+=m/v[i];
        }
        if(s>=p)
        {
            sol=m;
            dr=m-1;
        }
        else
        {
            st=m+1;
        }
    }
    fout<<sol;
    return 0;
}