Cod sursa(job #2671163)

Utilizator TghicaGhica Tudor Tghica Data 11 noiembrie 2020 16:31:24
Problema GFact Scor 0
Compilator c-64 Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <stdio.h>

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

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

int main() {
  FILE *fin, *fout;
  fin = fopen( "gfact.in", "r" );
  fout = fopen( "gfact.out", "w" );
  int st, dr, k, div, q, p, mij, ok, l, i;
  fscanf( fin, "%d", &p );
  dr = 100;
  if( p > dr )
    dr = p;
  fscanf( fin, "%d", &q );
  div = 2;
  k = -1;
  l = 0;
  if( p % div == 0 ) {
    k++;
    v[k][0] = p;
  }
  while( p % div == 0 ) {
    v[0][1]++;
    p /= div;
  }
  if( v[k][0] == div )
    v[k][1] *= q;
  div++;
  while( div < p ) {
    if( p % div == 0 ) {
      k++;
      v[k][0] = p;
    }
    while( p % div == 0 ) {
      v[k][1]++;
      p /= div;
    }
    if( v[k][0] == div )
      v[k][1] *= q;
    div += 2;
  }
  st = v[k][0];
  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;
}