Cod sursa(job #1557305)

Utilizator andrei_diaconu11Andrei C. Diaconu andrei_diaconu11 Data 27 decembrie 2015 11:36:12
Problema GFact Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include <stdio.h>

using namespace std;

long long cauta(int p, int q){
  long long st=1, dr, mid, x, put;
  dr=5000000000000000000;
  while(dr-st>1){
    mid=(st+dr)/2;
    x=p;
    put=0;
    while(x<=mid){
      put=put+mid/x;
      x*=p;
    }
    if(put<q)
      st=mid;
    else
      dr=mid;
  }
  return dr;
}

int main()
{
  int p, q, div, put;
  long long sol, nr;
  FILE *fi=fopen("gfact.in", "r"), *fo=fopen("gfact.out", "w");
  fscanf(fi, "%d%d", &p, &q);
  div=2;
  sol=0;
  while(div*div<=p){
    put=0;
    while(p%div==0){
      p/=div;
      put++;
    }
    put*=q;
    nr=cauta(div,put);
    if(nr>sol)
      sol=nr;
    div++;
  }
  if(p>1){
    nr=cauta(p,q);
    if(nr>sol)
      sol=nr;
  }
  fprintf(fo, "%lld", sol);
  fclose(fi);
  fclose(fo);
  return 0;
}