Cod sursa(job #2794190)

Utilizator dragutamihai1234Draguta Mihai dragutamihai1234 Data 4 noiembrie 2021 14:19:20
Problema GFact Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
using namespace std;

long long p,q;

long long legendre(long long n)
{
    long long val=p,nr=0,minn=60000000000000;
    for(int i=2; i*i<=val; i++)
    {
        long long exp=0,val2=n;
        if(val%i==0)
        {
            nr=0;
            while(val%i==0)
            {
                val/=i;
                exp++;
            }
            while(val2>=i)
            {
                val2/=i;
                nr+=val2;
            }
            nr/=exp;
            if(nr<minn)
                minn=nr;
        }
    }
    if(val>1)
    {
        nr=0;
        long long val2=n;
        while(val2>=val)
        {
            val2/=val;
            nr+=val2;
        }
        if(nr<minn)
            minn=nr;
    }
    return minn;
}

long long cautbin()
{
    long long p=1,u=60000000000000,sol=0;
    while(p<=u)
    {
        long long m=(p+u)/2;
        if(legendre(m)<q)
            p=m+1;
        else
        {
            u=m-1;
            sol=m;
        }
    }
    return sol;
}

int main()
{
    ifstream cin("gfact.in");
    ofstream cout("gfact.out");
    cin>>p>>q;
    cout<<cautbin();
    return 0;
}