Cod sursa(job #1917275)

Utilizator herbertoHerbert Mohanu herberto Data 9 martie 2017 11:51:50
Problema GFact Scor 75
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>
//using namespace std;
#define INF 2000000000

int legendre(int n, int d){
  int p, s;
  p=d; s=0;
  while(n/p>=1){
    s=s+n/p;
    p*=d;
  }
  return s;
}

int main(){
  FILE*fin=fopen("gfact.in", "r");
  FILE*fout=fopen("gfact.out", "w");
  int n, p, q, st, dr, d, nr, min, exp, sol, cop;
  fscanf(fin, "%d%d", &p, &q);
  st=1; dr=INF;
  sol=-INF;
  while(st<=dr){
    n=(st+dr)/2;
    d=2;
    min=INF;
    cop=p;
    while(d*d<=p){
      exp=0;
      while(p%d==0){
        p/=d;
        exp++;
      }
      if(exp>0){
        nr=legendre(n, d);
        if(nr/exp<min)
          min=nr/exp;
      }
      d++;
    }
    if(p>1){
      nr=legendre(n, p);
      if(nr<min)
        min=nr;
    }
    if((min/q)>=1){
      dr=n-1;
      sol=n;
    }
    else
      st=n+1;
    p=cop;
  }
  fprintf(fout, "%d", sol);
  return 0;
}