Cod sursa(job #2672126)

Utilizator TghicaGhica Tudor Tghica Data 13 noiembrie 2020 10:00:53
Problema GFact Scor 90
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <stdio.h>

int v[10][2];///e posibil sa nu fie asta numearul maxim de divizorii primi, dar nu recunosc nimic

long long leg( int k, long long a ) {
  long long exp, pow;
  exp = 0;
  pow = k;
  while( pow <= a ) {
    exp += a / pow;
    pow *= k;
  }
  return exp;
}

int main() {
  FILE *fin, *fout;
  fin = fopen( "gfact.in", "r" );
  fout = fopen( "gfact.out", "w" );
  int k, n, q, p, ok, l, i, e;
  long long st, dr, mij, cp;
  fscanf( fin, "%d", &n );
  cp = n;
  fscanf( fin, "%d", &q );
  p = 2;
  k = -1;
  while (p * p <= n) {
    e = 0;
    while (n % p == 0) {
      n = n / p;
      ++e;
    }
    if (e > 0) {
      k++;
      v[k][0] = p;
      v[k][1] = e * q;
    }
    ++p;
  }
  if (n > 1){
    k++;
    v[k][0] = n;
    v[k][1] = q;
  }
  st = v[k][0] - 1;
  dr = cp * q + 1;
  while( dr - st > 1 ) {
    mij = ( dr - st ) / 2 + st;
    ok = 1;
    for( i = 0; i <= k; i++ ) {
      if( leg( v[i][0], mij ) < v[i][1] )
        ok = 0;
    }
    if( ok ) {
      dr = mij;
      l = mij;
    } else {
      st = mij;
    }
  }
  fprintf( fout, "%d", l );
  return 0;
}