Cod sursa(job #2282741)

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

using namespace std;

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

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

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

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

long long cautbin() {
    long long r = 0, pas = 1LL << L;
    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;
}