Cod sursa(job #1691707)

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

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 );

    return pos + 1;
}

int srcA( int nr, int pow ) {
    int d, p, max, c;

    max = 0;
    for ( d = 2; d * d <= nr; d ++ ) {
        if ( nr % d == 0 ) {
            p = 0;
            while ( nr % d == 0 ) {
                nr /= d;
                p ++;
            }
            printf( "%d %d\n", d, pow * p );
            c = src( pow * p, d );
            printf( "%d %d %d\n", nr, d, pow * p );
            if ( c > max )
                max = c;
        }
    }

    if ( nr > 1 )
        max = src( pow, nr );

    return max;
}

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", srcA( p, q ) );

    fclose( fin );
    fclose( fout );

    return 0;
}