Cod sursa(job #1691698)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 19 aprilie 2016 11:00:11
Problema GFact Scor 20
Compilator c Status done
Runda Arhiva de probleme Marime 0.83 kb
# include <stdio.h>
# include <stdlib.h>

int cmmd( int nr ) {
    int d;

    for ( d = 2; d * d <= nr; d ++ )
        if ( nr % d == 0 )
            return nr / d;
    return nr;
}

int nrZero( int nr, int baza ) {
    int k;

    k = 0;
    while ( nr ) {
        nr /= baza;
        k += nr;
    }

    return k;
}

int src( int nr, int baza ) {
    int pos, pas;
    pos = 0;
    for ( pas = 30; pas >= 0; pas -- )
        if ( nrZero( pos + ( 1 << pas ), baza ) < nr )
            pos += ( 1 << pas );

    if ( nrZero( pos + 1, baza ) == nr )
        return pos + 1;
    else
        return -1;
}

int main() {
    FILE *fin = fopen( "gfact.in", "r" ), *fout = fopen( "gfact.out", "w" );

    int p, q;

    fscanf( fin, "%d%d", &p, &q );

    fprintf( fout, "%d", src( q, cmmd( p ) ) );

    fclose( fin );
    fclose( fout );

    return 0;
}