Cod sursa(job #1101841)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 9 februarie 2014 12:03:04
Problema GFact Scor 25
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include<cstdio>
#include<cmath>
#include<algorithm>

using namespace std;

FILE *in,*out;

long long p;

long long nrzero(long long val,long long val2)
{
    long long rez=0;
    do
    {
        val/=val2;
        rez+=val;
    } while (val/val2!=0);
    return rez;
}

long long  cb(long val3)
{
    long long st=1,dr,val,med;
    dr=(long long )1<<62;
    while (st<=dr)
    {
        med=dr-(dr-st)/2;
        val=nrzero(med,val3);
        if (val>=p)
            dr=med-1;
        else
            st=med+1;
    }
    val=nrzero(med,val3);
    if (val<p)
    {
        med++;
        val=nrzero(med,val3);
    }
    if (val>=p)
        return med;
    else
        return -1;
}

int main()
{

    long long n=0,n2,nr,i,max2=0;

    in=fopen("gfact.in","rt");

    fscanf(in,"%lld %lld",&n,&p);

    fclose(in);

    n2=n;

    if (n%2==0)
    {
        nr=0;
        while (n%2==0)
            n/=2,nr++;
        p*=nr;
        max2=max(max2,cb(2));
        p/=nr;
    }
    for (i=3;i<=n2/2;i+=2)
        if (!(n%i))
        {
            nr=0;
            while (n%i==0)
                n/=i,nr++;
            p*=nr;
            max2=max(max2,cb(i));
            p/=nr;
        }

    out=fopen("gfact.out","wt");

    fprintf(out,"%lld",max2);

    fclose(out);

    return 0;

}