Cod sursa(job #2093390)

Utilizator mariaBmaria blaj mariaB Data 23 decembrie 2017 16:45:02
Problema GFact Scor 65
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int prim(int a){
    for(int i=2;i*i<=a;++i){
        if(a%i==0)
            return 0;
    }
    return 1;
}
int leg(int a,int p){
    int rez=1,q=0;
    while(rez*p<=a){
        rez*=p;
        q+=a/rez;
    }
    return q;
}
int main()
{
    ifstream cin("gfact.in");
    ofstream cout("gfact.out");
    int p,q,fact=0,max=0,x=2;
    cin>>p>>q;
    while(x*x<=p && p>1){
          if(p%x==0){
             int cnt=0;
             while(p%x==0){
             cnt++;
             p/=x;
             }
             long long st=1,dr=cnt*x,sol;
             while(st<=dr){
                 long long poz=(st+dr)/2;
                 if(leg(poz,x)>=cnt*q){
                    sol=poz;
                    dr=poz-1;
                 }
                 else
                    st=poz+1;
             }
             if(sol>max)
                max=sol;
          }
          x++;
    }
    if(p!=1){
    long long dr=p*q,st=1,sol;
    while(st<=dr){
        long long poz=(st+dr)/2;
        if(leg(poz,p)>=q){
            sol=poz;
            dr=poz-1;
        }
        else
            st=poz+1;
    }
    if(sol>max)
        max=sol;
    }
    cout<<max;
    return 0;
}