Cod sursa(job #2282733)

Utilizator mihaipriboimihailucapriboi mihaipriboi Data 14 noiembrie 2018 14:15:33
Problema GFact Scor 20
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream>
#include <stdio.h>
#define ND 10
#define L 45

using namespace std;

int vd[ND], vp[ND], id, p , q;

void descompunere( int n ) {
    int d, p;
    id = 0;
    d = 2;
    while( d * d <= n ) {
        p = 0;
        while( n % d == 0 ) {
            n /= d;
            p++;
        }
        if( p > 0 ) {
            vd[id] = d;
            vp[id++] = p;
        }
        d++;
    }
    if( n > 1 ) {
        vd[id] = n;
        vp[id++] = 1;
    }
}

long long putere( long long n, int put ) {
    long long r = 0;
    while( n >= put ) {
        r += n / p;
        n /= p;
    }
    return r;
}

bool divfact( long long n ) {
    int i;
    for( i = 0; i < id; i++ ) {
        if( putere( n , vd[i]) < vp[i] * q ) {
            return false;
        }
    }
    return true;
}

long long cautbin() {
    long long r, pas;
    pas = 1LL<<L;
    r = 1;
    while( pas > 0 ) {
        if( !divfact(r + pas) ) {
            r += pas;
        }
        pas /= 2;
    }
    r++;
    return r;
}

int main() {
    FILE *fin, *fout;
    fin = fopen( "gfact.in", "r" );
    fout = fopen( "gfact.out", "w" );
    fscanf( fin, "%d%d", &p, &q );
    descompunere( p );
    fprintf( fout, "%lld", cautbin() );
    fclose( fout );
    return 0;
}